第十二章SQLServer统计信息(3)发现过期统计信息并处理
前言: 统计 信息 是关于谓词中的数据分布的主要 信息 源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能 统计 需要返回的数据。 在创建列的 统计 信息 后,在 DML 操作如 insert 、 update 、 delete 后, 统计 信息 就会过时。因为这些
前言:
统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据。
在创建列的统计信息后,在DML操作如insert、update、delete后,统计信息就会过时。因为这些操作更改了数据,影响了数据分布。此时需要更新统计信息。
在高活动的表中,统计信息可能几个小时就会过时。对于静态表,可能几个星期才会过时。这要视乎表上DML的操作。
从2000开始,SQLServer对增删改操作会增加在表sysindexes中的RowModCtr(Row Modification Counter)值,当统计信息更新后,该值会重置会0,并重新累加。所以查看这个表的这个值就可以知道统计信息是否过时。
在2000之后,SQLServer改变了这种跟踪方式,把更改存放到对应的数据行上。这个值是未公开的ColModCtr。
但是sys.sysindexes到2012依旧可用,还是可以用这个表的数值来确定是否过期。
准备工作:
本文将用到下面的系统视图和兼容性视图:
1、 sys.sysindexes:兼容性视图,提供RowModCtr列值,是本文的核心。
2、 sys.indexes:使用表ID来获得统计信息名。
3、 sys.objects:获取架构名。
步骤:
显示RowModCtr值很高的统计信息:
SELECT DISTINCT OBJECT_NAME(SI.object_id) AS Table_Name , SI.name AS Statistics_Name , STATS_DATE(SI.object_id, SI.index_id) AS Last_Stat_Update_Date , SSI.rowmodctr AS RowModCTR , SP.rows AS Total_Rows_In_Table , 'UPDATE STATISTICS [' + SCHEMA_NAME(SO.schema_id) + '].[' + OBJECT_NAME(SI.object_id) + ']' + SPACE(2) + SI.name AS Update_Stats_Script FROM sys.indexes AS SI( NOLOCK ) INNER JOIN sys.objects AS SO( NOLOCK ) ON SI.object_id = SO.object_id INNER JOIN sys.sysindexes SSI( NOLOCK ) ON SI.object_id = SSI.id AND SI.index_id = SSI.indid INNER JOIN sys.partitions AS SP ON SI.object_id = SP.object_id WHERE SSI.rowmodctr > 0 AND STATS_DATE(SI.object_id, SI.index_id) IS NOT NULL AND SO.type = 'U' ORDER BY RowModCTR DESC
分析:
需要了解一些事情:
1、 从你上次更新统计信息是何时的事情?
2、 在更新统计信息之后有多少事务发生在表上?
3、 哪些T-SQL需要用于更新统计信息。
4、 更新统计信息是否可行?这个是对比RowModCTR列和Total_Rows_In_Table列。
当在数据库开启了Auto_Update_Statistics之后,还有数据的话,那就有必要更新统计信息。下面有一些规则:
1、 表大小从0增长。
2、 当表的数据小于等于500时没有问题,并且ColModCtr从超过500行之后开始增长。
3、 当表的行数超过500行时,在统计信息对象的引导列的ColModCtr值超过500+20%的行数时,就需要更新。
例子:有一个100万行的表,优化器会在插入200500行新数据后认为统计信息过时。但是这并不是绝对化的。
扩充知识:
没有直接的方式访问ColModCtr的值,因为它只是用于优化引起,并且对用户透明,但是可以使用DAC(专用管理员连接)来访问sys.sysrscols.rcmodified系统。但是仅在2008R2及以后版本才可用。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

导入步骤如下:将 MDF 文件复制到 SQL Server 的数据目录(通常为 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)。在 SQL Server Management Studio(SSMS)中,打开数据库并选择“附加”。单击“添加”按钮,选择 MDF 文件。确认数据库名称,点击确定按钮即可。

对于 SQL Server 数据库中已存在同名对象,需要采取以下步骤:确认对象类型(表、视图、存储过程)。如果对象为空,可使用 IF NOT EXISTS 跳过创建。如果对象有数据,使用不同名称或修改结构。使用 DROP 删除现有对象(谨慎操作,建议备份)。检查架构更改,确保没有引用删除或重命名的对象。

1、首先我们右击任务栏空白处,选择【任务管理器】选项,或者右击开始徽标,然后再选择【任务管理器】选项。2、在打开的任务管理器界面,我们点击最右端的【服务】选项卡。3、在打开的【服务】选项卡,点击下方的【打开服务】选项。4、在打开的【服务】窗口,右击【InternetConnectionSharing(ICS)】服务,然后选择【属性】选项。5、在打开的属性窗口,将【打开方式】修改为【禁用】,点击【应用】后点击【确定】。6、点击开始徽标,然后点击关机按钮,选择【重启】,完成电脑重启就行了。

若误删 SQL Server 数据库,可采取以下步骤恢复:停止数据库活动;备份日志文件;检查数据库日志;恢复选项:从备份恢复;从事务日志恢复;使用 DBCC CHECKDB;使用第三方工具。请定期备份数据库并启用事务日志以防止数据丢失。

要查看 SQL Server 端口号:打开 SSMS,连接到服务器。在对象资源管理器中找到服务器名称,右键单击它,然后选择“属性”。在“连接”选项卡中,查看“TCP 端口”字段。

当 SQL Server 服务无法启动时,可采取以下步骤解决:检查错误日志以确定根本原因。确保服务帐户具有启动服务的权限。检查依赖项服务是否正在运行。禁用防病毒软件。修复 SQL Server 安装。如果修复不起作用,重新安装 SQL Server。

SQL Server 数据库文件通常存储在以下默认位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可通过修改数据库文件路径设置来自定义数据库文件位置。

如果 SQL Server 安装失败,可通过以下步骤清理:卸载 SQL Server删除注册表项删除文件和文件夹重启计算机
