数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

4
在HashBytes函数中选择正确的算法
我们需要创建nvarchar数据的哈希值以进行比较。T-SQL中有多种可用的哈希算法,但是在这种情况下,哪一种是最好的选择? 我们要确保两个不同的nvarchar值具有重复哈希值的风险最小。根据我对互联网的研究,MD5似乎是最好的。那正确吗?MSDN向我们(下面的链接)介绍了可用的算法,但是没有说明在哪种条件下使用哪种算法? 哈希(Transact-SQL) 我们需要在两个nvarchar(max)列上联接两个表。可以想象,查询需要一段时间才能执行。我们认为最好保留每个nvarchar(max)数据的哈希值,然后对哈希值进行联接,而不是blob的nvarchar(max)值。问题是哪种哈希算法提供了唯一性,因此我们不会遇到为多个nvarchar(max)拥有一个哈希值的风险。

4
有没有工具可以检查我的数据库是否被规范化为第三种形式?
我最近了解了标准化,并了解实现新架构时标准化的重要性。 如何检查我的数据库是否符合2NF或3NF标准? 手动检查是肯定的选择,但是我在这里寻找自动化工具。 我不是在寻找点击工具,而是要突出一些可能的优化以使其符合3NF表的功能。我猜它可能使用基于良好样本数据和/或列名语义分析的统计信息。

2
MySQL:树层次查询
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 MySQL中的一个树内的子树 在我的MYSQL中Database COMPANY,我具有一个Table: Employee递归关联,一个雇员可以是其他雇员的老板。A self relationship of kind (SuperVisor (1)- SuperVisee (∞) )。 查询创建表: CREATE TABLE IF NOT EXISTS `Employee` ( `SSN` varchar(64) NOT NULL, `Name` varchar(64) DEFAULT NULL, `Designation` varchar(128) NOT NULL, `MSSN` varchar(64) NOT NULL, PRIMARY KEY (`SSN`), CONSTRAINT `FK_Manager_Employee` …


3
如何获取输出流的通知?
我在函数中有调试消息。这些消息像 RAISE NOTICE 'Value of id : %', id; 我将日志文件设置为 \o messages.txt 然后我要做我需要做的 \i process.sql 当执行终止时,\o。 问题是我没有将通知引起的消息放入messages.txt中。消息显示在屏幕上,但我希望将它们写在messages.txt中 我该怎么办? 我尝试使用,RAISE LOG...并且消息被写在日志文件中……这不是我想要的。 我有一个工作 plsql -f /path/to/process.sql > messages.txt 2>&1 但我想知道如何在plsql客户端上使用\ i和\ o并将消息放入\ o中指定的文件中 我在cygwin上的客户端是psql(PostgreSQL)8.2.11,服务器版本是9.0.7
20 postgresql 

2
SQL编译对SQL Server的性能有多严重的影响?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我正在分析一个SQL Server 2005实例,通过PerfMon的SQLServer:SQL Statistics - SQL Compilations/sec指标,我发现平均值约为170左右。 我剔除了SQL事件探查器,并寻找SP:Compile或SQL:Compile事件。显然它们不存在。我没有找到Stored Procedure/SP:Recompile和TSQL/SQL:StmtRecompile事件。我在探查器中看到的数据量表明这些是看错的事件,尽管我不确定。 所以我的问题。任何一个答案都是不错的。 如何查看SQL Server中正在编译的内容? 我选择了错误的指标来查看吗?在Perfmon还是SQL Profiler中? 关于Stored Procedure/SP:Recompile和TSQL/SQL:StmtRecompileSQL事件探查器中的事件...它们不包括“持续时间”度量标准。如果无法提供查看事件对系统的影响的方法,那么如何评估这些事件对系统的影响。

2
T-SQL查询使用完全不同的计划,具体取决于我要更新的行数
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我有一个带有“ TOP(X)”子句的SQL UPDATE语句,而我要更新值的行大约有40亿行。当我使用“ TOP(10)”时,我得到一个几乎立即执行的执行计划,但是当我使用“ TOP(50)”或更大时,查询永远不会完成(至少在我等待时)。它使用完全不同的执行计划。较小的查询使用一个非常简单的计划,该计划带有一对索引查找和一个嵌套循环联接,其中完全相同的查询(UPDATE语句的TOP子句中的行数不同)使用的方案涉及两个不同的索引查找,表假脱机,并行性以及其他一系列复杂性。 我已经使用“ OPTION(USE PLAN ...)”来强制它使用由较小查询生成的执行计划-当我这样做时,我可以在几秒钟内更新多达100,000行。我知道查询计划是好的,但是SQL Server仅在只涉及少量行的情况下才会自行选择该计划-更新中任何相当大的行数都会导致次优计划。 我以为应该归咎于并行性,所以我MAXDOP 1对查询进行设置,但是没有任何效果-这一步骤已经过去,但是糟糕的选择/性能却没有。我也sp_updatestats今天早上跑了,以确保不是这个原因。 我已经附上了两个执行计划-计划越短也越快。此外,这是有问题的查询(值得注意的是,无论行数是大还是小,我包含的SELECT似乎都是快速的): update top (10000) FactSubscriberUsage3 set AccountID = sma.CustomerID --select top 50 f.AccountID, sma.CustomerID from FactSubscriberUsage3 f join dimTime t on f.TimeID = t.TimeID join #mac sma on f.macid = …

3
MongoDB:RAM需求
将整个索引存储在memory / ram中是否足够?mongodb甚至尝试分配尽可能多的ram来存储甚至用于快速读取的数据吗? 我想运行mongodb +其他应用程序,看起来mongodb是唯一一个不允许我定义RAM范围的应用程序,可以说“ max_memory_allocated_or_reserved = 8GB”。 如果没有办法,我应该向oom-killer解释说mongod是“不好的”过程,我认为这不是最佳实践。
20 mongodb 

2
在功能/过程中进行DML操作后是否需要提交?
我想知道是否有必要在函数/过程中的插入/删除/更新之后写提交? 例: create or replace function test_fun return number is begin delete from a; return 0; end; 或程序 create or replace procedure aud_clear_pro as begin delete from a; end; 删除后需要提交吗? 无法了解以下情况: 如果我从SQL窗口调用函数/过程,则需要提交 但 如果我使用dbms_scheduler计划功能/过程并运行作业,则自动提交delete语句。 为什么?

2
为什么DELETE对性能有持续的影响?
最后是一个测试脚本,用于比较@table变量和#temp表之间的性能。我认为我已正确设置-性能计时已从外部获取在DELETE / TRUNCATE命令进行的。我得到的结果如下(以毫秒为单位)。 @Table Variable #Temp (delete) #Temp (truncate) --------------- -------------- ---------------- 5723 5180 5506 15636 14746 7800 14506 14300 5583 14030 15460 5386 16706 16186 5360 只是为了确保我理智,这表明CURRENT_TIMESTAMP(aka GetDate())是在语句时而不是批处理时使用的,因此TRUNCATE / DELETE与SET @StartTime = CURRENT_TIMESTAMP语句之间不应存在任何交互。 select current_timestamp waitfor delay '00:00:04' select current_timestamp ----------------------- 2012-10-21 11:29:20.290 ----------------------- 2012-10-21 11:29:24.290 当使用DELETE清除表时,在第一次运行和随后的运行之间的跳转中,这是非常一致的。我对DELETE的了解缺少什么?我已经重复了很多次,交换了命令,调整了tempdb的大小,使其不需要增长等。 CREATE TABLE …

2
还原数据库(不包括FILESTREAM数据)
背景 我们正在开发一个系统,该系统的底部有一个大型数据库。它是在SQL Server 2008 R2上运行的MS SQL数据库。数据库的总大小约为12 GB。 其中约有8.5 GB位于单个表中BinaryContent。顾名思义,这是一个表,我们将任何类型的简单文件直接存储在表中作为BLOB。最近,我们一直在测试使用FILESTREAM将所有这些文件从数据库移出到文件系统的可能性。 我们对数据库进行了必要的修改,没有任何问题,并且在迁移之后,我们的系统仍然可以正常工作。该BinaryContent表大致如下所示: CREATE TABLE [dbo].[BinaryContent]( [BinaryContentID] [int] IDENTITY(1,1) NOT NULL, [FileName] [varchar](50) NOT NULL, [BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL ) ON [PRIMARY] FILESTREAM_ON [FileStreamContentFG] ALTER TABLE [dbo].[BinaryContent] ADD [FileContentBinary] [varbinary](max) FILESTREAM NULL ALTER TABLE [dbo].[BinaryContent] ADD CONSTRAINT [DFBinaryContentRowGUID] DEFAULT (newsequentialid()) FOR [BinaryContentRowGUID] …

2
设置innodb_buffer_pool是什么,为什么?
我有170GB的InnoDB索引和数据。 我必须重新调整innodb_buffer_pool大小才能获得更好的性能.InnoDB表的最大表大小(Index + data)为28GB。 那么innodb_buffer_pool的最佳大小应该是多少。 更新 我们将要将此本地数据库迁移到ec2,因此将根据innodb的当前统计信息设置RAM,这就是为什么我需要缓冲池的大小,以便在那里可以有可用RAM的原因。 每个表的文件已启用。 我正在使用Linux机器。
20 mysql  innodb 




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.