Questions tagged «system-tables»

8
如何在数据库中查询空表
由于有些“开发人员”,我们在系统上进行了工作,因此空表存在问题。我们发现,在将数据转移到云的过程中,复制了几个表,但是没有复制其中的数据。 我想对系统表运行查询以查找哪些用户表为空。我们正在使用MS SQL 2008 R2。 谢谢您的帮助。

2
在SSDT中引用系统视图?
我已将一个数据库导入SSDT,其中包含对系统视图(特别是sys.columns)的引用。问题是,当我构建项目时,我随后收到有关未解析引用的警告 从我在MSDN论坛上看到的来看,这似乎是一个已知的问题:http : //social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/5a7026bd-0602-42e6-a639- d73bed903c26 现在,我知道我可以关闭或忽略该警告,但是有人知道实际的解决方案吗? 谢谢

2
可以对SQL Server系统表进行碎片整理吗?
我们有几个数据库,在其中创建和删除了大量表。据我们所知,SQL Server不会对系统基表进行任何内部维护,这意味着它们随着时间的流逝会变得非常零散,并且大小会膨胀。这给缓冲池造成了不必要的压力,并且还负面影响了操作的性能,例如计算数据库中所有表的大小。 有没有人建议尽量减少这些核心内部表上的碎片?一个显而易见的解决方案可以避免创建太多表(或在tempdb中创建所有临时表),但是出于这个问题的目的,我们可以说应用程序没有这种灵活性。 编辑:进一步的研究显示了这个悬而未决的问题,该问题看起来密切相关,并且表明可以选择某种形式的手动维护ALTER INDEX...REORGANIZE。 初步研究 有关这些表的元数据可以在以下位置查看sys.dm_db_partition_stats: -- The system base table that contains one row for every column in the system SELECT row_count, (reserved_page_count * 8 * 1024.0) / row_count AS bytes_per_row, reserved_page_count/128. AS space_mb FROM sys.dm_db_partition_stats WHERE object_id = OBJECT_ID('sys.syscolpars') AND index_id = 1 -- row_count: 15,600,859 -- …

1
我可以提高膨胀系统表的性能吗?
背景: 我有大量的数据库,其中包含大量的VIEW和大量的SYNONYM。例如,一个分贝具有超过10k的VIEW和2+百万个SYNONYM。 一般问题: 涉及sys.objects(通常是系统表)的查询往往很慢。涉及sys.synonyms的查询是冰河。我想知道如何才能提高性能。 具体示例 此命令由第三方工具运行。在应用程序和SSMS中速度都很慢: exec sp_tables_rowset;2 NULL,NULL 我的问题: 如何使运行速度更快? 我尝试过的内容: 如果SET STATISTICS IO ON我得到以下输出: (受影响的2201538行)表'sysobjrdb'。扫描计数1,逻辑读28,物理读0,预读0,lob逻辑读0,lob物理读0,lob 预读0。表'sysschobjs'。扫描计数1,逻辑读53926,物理读0,预读0,lob逻辑读0,lob物理读0,lob预读0。 我已经能够更新基础系统表上的统计信息。这已在我的SQL 2008 R2或更高版本的环境中起作用: UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN 我还能够执行索引维护。这适用于我的SQL 2012或更高版本的环境。例如,运行sp_help 'sys.sysschobjs'标识了表上的索引,然后从那里创建并运行以下命令: ALTER INDEX clst ON sys.sysschobjs REORGANIZE ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE ALTER INDEX nc2 ON …

2
永不结束查询存储搜索
我从一开始说,我的问题/问题类似于此之前的一个,但因为我不知道的原因或起始信息是一样的,我决定后,我的问题有一些更多的细节。 当前问题: 在一个奇怪的时刻(工作日临近结束),生产实例开始出现异常行为: 实例的CPU较高(从约30%的基准开始,它增加了约一倍,并且仍在增长) 每秒增加的事务数(尽管应用程序负载未发生任何变化) 空闲会话数增加 从未显示此行为的会话之间发生奇怪的阻止事件(即使读取未提交的会话也导致了阻止) 等待间隔的最长时间是第一页上的非页面锁,第二名是锁 初步调查: 使用sp_whoIsActive,我们看到了由监视工具执行的查询决定运行速度非常慢,并占用大量CPU,这在以前是没有发生的。 隔离级别未提交; 我们查看了看到古怪数字的计划:StatementEstRows =“ 3.86846e + 010”,其中约150 TB的估计数据已返回 我们怀疑原因是监视工具的查询监视功能引起了,因此我们禁用了该功能(我们还与提供程序一起打开了一张票证,以检查他们是否知道任何问题) 从第一个事件开始,它又发生了几次,每次我们终止会话时,一切都恢复正常; 我们意识到查询极为相似的一个查询在BOL使用MS用于查询存储监测-查询,最近在性能倒退(在时间上比较不同点) 我们手动运行相同的查询并看到相同的行为(使用的CPU不断增加,闩锁等待时间增加,意外锁定等。) 有罪查询: Select qt.query_sql_text, q.query_id, qt.query_text_id, rs1.runtime_stats_id AS runtime_stats_id_1, interval_1 = DateAdd(minute, -(DateDiff(minute, getdate(), getutcdate())), rsi1.start_time), p1.plan_id AS plan_1, rs1.avg_duration AS avg_duration_1, rs2.avg_duration AS avg_duration_2, p2.plan_id AS plan_2, interval_2 = …

2
查找以编程方式联接表所需的所有联接
给定一个SourceTable和TargetTable,我想以编程方式创建一个具有所有所需联接的字符串。 简而言之,我试图找到一种创建这样的字符串的方法: FROM SourceTable t JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn 我有一个查询,该查询返回给定表的所有外键,但是在尝试以递归方式遍历所有这些以找到最佳联接路径并制成字符串时遇到了局限性。 SELECT p.name AS ParentTable ,pc.name AS ParentColumn ,r.name AS ChildTable ,rc.name AS ChildColumn FROM sys.foreign_key_columns fk JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id JOIN sys.columns rc …

3
捕获SQL Server CDC中更改的日期时间
因此,我们已经开始探索在我们的一个生产数据库中使用变更数据捕获。我们想知道每次更改的日期时间。通读演练和教程等内容,似乎标准方法是使用LSN与cdc.lsn_time_mapping系统表相关。当谈论一天中成千上万的变化时,这种方法行得通,但不是很简单,也不是很有效。 在测试环境中,我对变更跟踪表进行了以下调整。我发表了一条ALTER TABLE声明,在末尾添加一列,[__ChangeDateTime]并将其设置为默认值GetDate()。该方法似乎有效,更改跟踪仍然正常运行,捕获了日期时间。 但是混用系统表会让我有些紧张。 如果这不是Microsoft从一开始就添加的系统字段,则必须说明其原因。由于他们改而选择了LSN来cdc.lsn_time_mapping方法,我是否通过以这种方式创建自己的hack来解决问题? 更新: 在测试过程中发现,有时GetDate()不够精确,无法满足我们的需求-多个更改同时共享。建议使用sysdatetime()和datetime2将值移至纳秒级。显然只有2008年以上的选项。
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.