Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。


3
TempDB中损坏的分区如何导致DBCC CHECKDB报告没有问题?
我们的SQL Server之一最近报告了以下错误: DATE/TIME: 2/25/2013 9:15:14 PM DESCRIPTION: No catalog entry found for partition ID 9079262474267394048 in database 2. The metadata is inconsistent. Run DBCC CHECKDB to check for a metadata corruption. 不到15分钟后,我连接到服务器并运行: SELECT name FROM sys.databases WHERE database_id = 2; 哪个返回'tempdb'。然后我跑了: DBCC CHECKDB ('tempdb') WITH NO_INFOMSGS, TABLERESULTS; 其中未返回任何结果,表明受影响的数据库没有问题。 数据库中的损坏如何导致上面的错误消息而又DBCC CHECKDB未报告问题?我假设页面校验和计算失败,导致该页面被标记为怀疑无法引用该页面的任何对象,但是我一定是错误的。 …

3
SQL Server Express可以拥有的最大连接数?
我在一台客户端计算机上安装了SQL Server 2005 Express版,并且许多其他用户也通过C#应用程序连接到了该SQL Server,我已经将它们作为接口提供了。 有时一台PC连接到SQL Server,有时仅抛出异常 找不到SQL Server。... 我相信Express版本达到了它的最大连接限制,然后给出了错误。 请指导我如何解决此问题。 任何可以帮助我了解哪个版本的并行连接数量的白皮书, 我愿意升级到SQL Server 2008或SQL Server 2012,但更喜欢Express版本。如果他们真的在这种情况下还给我,我也可以选择其他版本,否则Express版本表现不错。

2
如何检查空值或空表值参数?
我有一个存储过程(SS2k8),带有几个表值参数,有时会为null或为空。我看过这个StackOverflow帖子,其中指出应该从调用参数列表中省略空/空TVP。我的问题是我无法弄清楚如何在存储过程中检查空或空,因为“ IF(@tvp IS NULL)”在创建过程时失败,并显示消息“必须声明标量变量” @tvp”。我是否必须在TVP上执行SELECT COUNT(*)并检查零? 代码摘录: CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS IF (@tvp IS NOT NULL) -- doesn't work BEGIN -- lots of expensive processing END ELSE BEGIN -- a little bit of cheap processing END ...

1
联接的虚拟表中的NEWID()导致意外的交叉应用行为
我的实际工作查询是一个内部联接,但是这个带有交叉联接的简单示例似乎几乎总是重现了该问题。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT NEWID() TEST_ID ) BB ( B ) 对于我的内部联接,我有很多行,我使用NEWID()函数向每个行添加了一个GUID,对于10行中的大约9行,与2行虚拟表的乘法产生了预期的结果,只有2个副本相同的GUID,而十分之1会产生不同的结果。至少可以说这是出乎意料的,这让我很难在测试数据生成脚本中找到此错误。 如果使用非确定性getdate和sysdatetime函数查看以下查询,您将不会看到此信息,无论如何我都不会看到-我总是在两个最终结果行中看到相同的datetime值。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT GETDATE() TEST_ID …

3
什么会导致孤立的## MS_PolicyEventProcessingLogin ##?
今天早上,我注意到我的SQL日志中充满了以下消息: 在队列'msdb.dbo.syspolicy_event_queue'上运行的激活的过程'[dbo]。[sp_syspolicy_events_reader]'输出以下内容: '无法作为数据库主体执行,因为主体“ ## MS_PolicyEventProcessingLogin ##”不存在,这种类型的无法冒充校长,或者您没有权限。” 运行以下命令EXEC sp_change_users_login 'report'表明登录实际上是孤立的。 我能够按照此MSDN帖子中的建议运行以下命令来修复它。 EXEC sp_change_users_login 'Auto_Fix', '##MS_PolicyEventProcessingLogin##', NULL, 'fakepassword' 但是问题仍然存在:究竟是什么原因导致该校长最初成为孤儿?谷歌搜索和研究表明,其他人也有这个问题,但是我还没有找到原因的描述。错误开始出现的那一刻,我什么都没有注意到。 去年夏天,我们将整个服务器移至SAN存储模型,此举恢复了所有操作(包括msdb),但那是几个月前。只是最近才使该症状变得明显,因为它早在几周前才出现在日志中。

3
什么时候应该删除索引并重新创建?
我们正在构建一个最初将是1 TB的数据仓库,并且每月将增长20gig。 对于某些表,我们每天进行ETL流程,而另一些表则每周/每月进行。 当有数据导入到表中时,是否有必要删除并重新创建索引? 是否有必要删除和重新创建索引,或者它们会自动更新? 统计信息设置为自动更新。 非常感谢您的帮助和指导。 我得到了这个天才脚本: SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + CASE WHEN ps.avg_fragmentation_in_percent > 40 THEN 'REBUILD' ELSE 'REORGANIZE' END + CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + …


2
在备份大型SQL Server数据库的同时执行数据更新操作
我有一个大型数据库(有上千万条记录),我将在该数据库上执行完整的数据库备份。 但是,数据库足够大,可以在备份之前和期间以及在备份发生期间和之后启动事务。 例如: T0 = Transaction A start T1 = Full database backup start T2 = Transaction B start (will not deadlock with A) T3 = Transaction A commit/rollback (does not matter, does it?) T4 = Full database backup end T5 = Transaction B commit/rollback (again, does not matter, does …

2
重建-聚集索引,表或两者?
我在任何地方都找不到确切的资源,因此希望一位专家可以在这里给我答案。 我有一个很大的表,我们必须在其中添加一列。聚集索引非常分散,我想做一个ALTER INDEX REBUILD清理它。 我通常ALTER TABLE REBUILD在更改列时也会执行一次,因为这会清除该操作中的所有指针或拆分。 因为我们在谈论聚集索引,本质上就是表,我是否需要同时做这两个事情? 我怀疑ALTER INDEX REBUILD集群中的不会更新遗嘱的所有内容ALTER TABLE,但是我也担心ALTER TABLE不会清理索引碎片。

1
一个表占用多少内存?
有没有办法找出一个表在SQL Server(2005及更高版本)中占用了多少内存? 例如,假设我有一个包含3000万条记录的表。我想知道缓冲区高速缓存中当前有多少个属于此表的页面,包括索引,数据和文本/图像页面。 我是通过Pinal Dave找到此查询的,但似乎此查询仅返回按索引分配的页面(无论是聚集的还是未聚集的页面)。

2
如何检查统计信息的最后执行时间?
最近,我们的索引遇到了许多问题,我们的DBA团队将其归因于最近没有运行过的统计信息。这让我感到疑惑-如何检查统计信息是否最近通过SQL Management Studio更新了? 如果这个问题不能很好地解释这个问题,我深表歉意-直到现在,我才被引入统计数据,在此之前,只要遇到性能相关问题,它就会查找索引。 编辑: 我正在使用以下内容,但收到语法错误: use *databasename* exec sp_autostats *schema.tablename* 我收到的错误是: Msg 102, Level 15, State 1, Line 2 Incorrect syntax near '.'. 为什么是这样?

1
为什么计算执行计划需要这么长时间?
我们的一位客户刚刚升级到新服务器。 对于特定的存储过程,首次执行该过程要花费三分钟以上的时间。随后的运行少于1秒。 这使我相信,最初的三分钟主要用于计算执行计划。然后,后续运行只需使用缓存的计划即可立即运行。 在我们的测试数据库上,大约需要5秒钟来计算同一步骤的计划。 我看不出计划本身有什么可怕的-尽管我不认为计划的相关性,因为计划显示了运行查询所花费的时间,而不是计算自身。 该服务器是16核,具有24 GB内存。不会发生繁重的CPU或内存负载。 是什么会导致仅在特定数据库上如此缓慢的计算? 我可以采取什么步骤找到问题的原因? 编辑 因此,我设法访问服务器并使用SET SHOWPLAN_XML ON运行查询。 我可以确认查询的CompileTime占用了查询执行时间的99%。该StatementOptmEarlyAbortReason是“超时”,我们与他们的数据库副本的原因是MemoryLimitExceeded测试数据库。

1
如何从LDF文件恢复数据?
我们正在使用SQL 2005 Express Edition。我们想从LDF文件中读取数据,以恢复一些已删除的记录。 我们尝试使用ApexSQL的试用版,这对我们有很大帮助。而不是寻求第三方软件,我们试图找出如何自己读取日志文件的方法。 我们如何从LDF文件读取和恢复数据?

1
表压缩如何影响SQL Server的缓冲池?
我很好奇SQL Server的缓冲池如何受到压缩数据表的影响。 是否像在磁盘上一样压缩了内存中的数据,还是对其进行了完全解压缩? 如果将数据压缩存储在缓冲池中,则在执行一条语句时,给定时间将多少个瞬时解压缩的数据保存在内存中;行/页,整个表(假设有足够的可用页来保存数据)还是“取决于”?

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.