1、建立t_mon_table_stat 用于存过需要更新统计信息的表
2、查找需要更新统计信息的表
3、创建存储过程
2、查找需要更新统计信息的表
点击(此处)折叠或打开
-
insert into t_mon_table_stat
SELECT DISTINCT SP.rows/SSI.rowmodctr rowdiff,
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 ,current_timestamp,0,null
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\'
and abs(SP.rows-SSI.rowmodctr)>10000
and (SP.rows/SSI.rowmodctr <0.4 or SP.rows/SSI.rowmodctr >2.5)
and OBJECT_NAME(SI.object_id) not like \'%History_%\' --排除历史表
and STATS_DATE(SI.object_id, SI.index_id)< dateadd(dd,-2,getdate()) --最近7天未更新统计信息
and OBJECT_NAME(SI.object_id) not like \'%-%\'
3、创建存储过程
点击(此处)折叠或打开
-
create procedure dbo.p_mon_upate_table_statistics
as
begin
declare
@datetime datetime
set @datetime=getdate()
declare update_tab_stat_cur cursor for select distinct table_name ,Update_Stats_Script,check_date from t_mon_table_stat
where check_date>dateadd(dd,-1,@datetime) and check_date<dateadd(dd,1,@datetime)
open update_tab_stat_cur
--声明变量
declare @sql varchar(1000)
declare @table_name varchar(100)
declare @check_date datetime
fetch next from update_tab_stat_cur into @table_name ,@sql ,@check_date
while @@FETCH_STATUS =0
begin
---更新check_status状态
update a set a.Check_Status=1 from t_mon_table_stat a where a.check_date =@check_date and a.table_name =@table_name and Check_Status in (0);
exec(@sql)
if @@ROWCOUNT >0
begin
---更新update_Date 和 Check_Status的值
update a set a.update_Date=getdate(),a.Check_Status=2 from t_mon_table_stat a where a.check_date =@check_date and a.table_name =@table_name and Check_Status=1;
end
fetch next from update_tab_stat_cur into @table_name ,@sql ,@check_date
end
---关闭游标
close update_tab_stat_cur
---释放游标资源
deallocate update_tab_stat_cur
end
编辑推荐:
- 优化临时表使用,SQL语句性能提升100倍03-02
- 关于更新SQLserver统计信息的存储过程03-02
- 显卡驱动是什么,有什么作用03-02
- 鼠标垫怎么洗,鼠标垫清洗方法03-02
- dll是什么文件,dll文件的作用03-02
- 更新显卡驱动有什么好处03-02
- 如何清理鼠标右键菜单03-02
- C盘空间怎么重新分区和调整分区大小03-02
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 优化临时表使用,SQL语句性能提升100倍
优化临时表使用,SQL语句性能提升100倍
26-03-02 - 显卡驱动是什么,有什么作用
显卡驱动是什么,有什么作用
26-03-02 - 鼠标垫怎么洗,鼠标垫清洗方法
鼠标垫怎么洗,鼠标垫清洗方法
26-03-02 - dll是什么文件,dll文件的作用
dll是什么文件,dll文件的作用
26-03-02 - 更新显卡驱动有什么好处
更新显卡驱动有什么好处
26-03-02 - 如何清理鼠标右键菜单
如何清理鼠标右键菜单
26-03-02 - C盘空间怎么重新分区和调整分区大小
C盘空间怎么重新分区和调整分区大小
26-03-02 - 什么是喷墨打印机?
什么是喷墨打印机?
26-03-02 - 无线鼠标好用吗 无线鼠标与和有线鼠标的区别
无线鼠标好用吗 无线鼠标与和有线鼠标的区别
26-03-02 - 查询某个表的索引信息
查询某个表的索引信息
26-03-02
