marrowyung
asked on
update statistics for all table in all SQL server 2005 database
Dear all,
Any script for me to update statistics for all table in all database?
I want to do it all in one file.
I am using SQL server 2005.
DBA100.
Any script for me to update statistics for all table in all database?
I want to do it all in one file.
I am using SQL server 2005.
DBA100.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
While easy enough to write such a script, it's an awful idea to blindly rebuild all stats, in that it could hurt performance a lot. So naturally you really shouldn't do that.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
So that you can then do something potentially terrible for performance a lot more easily :-) .
ASKER
cs97jjm3,
by "use DBNAME
go
EXEC sp_updatestats
GO "
I have to repeat that for all user DBs and this make me repeat a lot of time when no choice.
ScottPletcher,
cs97jjm3's command is not going to hurt the performance ?
acperkins,
you seems keep using that tools from that link for a long time, you so happy with the perfomance.
by "use DBNAME
go
EXEC sp_updatestats
GO "
I have to repeat that for all user DBs and this make me repeat a lot of time when no choice.
ScottPletcher,
cs97jjm3's command is not going to hurt the performance ?
acperkins,
you seems keep using that tools from that link for a long time, you so happy with the perfomance.
cs97jjm3's command is not going to hurt the performance ?
I believe Scott's point is that you do not want to update all the stats on all the databases, only the ones that need it. Otherwise it will take a very long time and it could potentially hurt performance if runs into an active time of the day.
I believe Scott's point is that you do not want to update all the stats on all the databases, only the ones that need it. Otherwise it will take a very long time and it could potentially hurt performance if runs into an active time of the day.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Dear all,
any way to know the current statistics information ? the script here: http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html already automatically found out which one is out of date ?
any script to show that out for all database ?
any way to know the current statistics information ? the script here: http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html already automatically found out which one is out of date ?
any script to show that out for all database ?
any script to show that out for all database ?
And again, if you look at Ola Hallengren's script you can set it to update all modified stats in all databases, see my comment here http:#a38801942
And again, if you look at Ola Hallengren's script you can set it to update all modified stats in all databases, see my comment here http:#a38801942
ASKER
From the script get from http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
What is xp_ss_delete command for ?
how about
1)sp_delete_backuphistory?
2) why sometimes update tmpFileGroups and sometimes update @tmpFileGroups, what is the different ?
Why in the script, we have " -- Delete old backup files" section" ?
What is xp_ss_delete command for ?
how about
1)sp_delete_backuphistory?
2) why sometimes update tmpFileGroups and sometimes update @tmpFileGroups, what is the different ?
Why in the script, we have " -- Delete old backup files" section" ?
ASKER
Please help to answer this question:
https://www.experts-exchange.com/questions/28052538/Error-message.html
https://www.experts-exchange.com/questions/28052538/Error-message.html
I am afraid I am going to have to pass, you still have too many open questions (12)
ASKER
Is the following script working fine in your environment without any problem (like delete/modify any existing data)
-- Update Statistics without NTEXT and Image Data Type:
SET NOCOUNT ON
DECLARE @columnname VARCHAR(MAX)
DECLARE @tablename SYSNAME
DECLARE @statsname SYSNAME
DECLARE @sql NVARCHAR(4000)
DECLARE @NAME VARCHAR(MAX)
declare @i INT
declare @j INT
create table #temp
(
tablename varchar(1000),
statsname varchar(1000),
columnname varchar(1000)
)
insert #temp(tablename,statsname,
SELECT DISTINCT
OBJECT_NAME(s.[object_id])
s.name AS StatName,
COALESCE(@NAME+ ', ', '')+c.name
FROM sys.stats s JOIN sys.stats_columns sc ON sc.[object_id] = s.[object_id] AND sc.stats_id = s.stats_id
JOIN sys.columns c ON c.[object_id] = sc.[object_id] AND c.column_id = sc.column_id
JOIN INFORMATION_SCHEMA.COLUMNS
JOIN sys.partitions par ON par.[object_id] = s.[object_id]
JOIN sys.objects obj ON par.[object_id] = obj.[object_id]
WHERE OBJECTPROPERTY(s.OBJECT_ID
AND D.DATA_TYPE NOT IN('NTEXT','IMAGE')
create table #temp1
(
id int identity(1,1),
tablename varchar(8000),
statsname varchar(8000),
columnname varchar(8000)
)
insert #temp1(tablename,statsname
select tablename,statsname,stuff(
(
select ','+ [columnname] from #temp where
statsname = t.statsname for XML path('')
),1,1,'')
from (select distinct tablename,statsname from #temp )t
SELECT @i=1
SELECT @j=MAX(ID) FROM #temp1
WHILE(@I<=@J)
BEGIN
SELECT @statsname = statsname from #temp1 where id = @i
SELECT @tablename = tablename from #temp1 where id = @i
SELECT @columnname = columnname from #temp1 where id = @i
SET @sql = N'UPDATE STATISTICS '+QUOTENAME(@tablename)+QU
--PRINT @sql
EXEC sp_executesql @sql
SET @sql = N'UPDATE STATISTICS '+QUOTENAME(@tablename)+QU
--PRINT @sql
EXEC sp_executesql @sql
SET @i = @i+1
END
DROP TABLE #temp
DROP TABLE #temp1
-- Update Statistics with NTEXT and Image Data Type:
SET NOCOUNT ON
DECLARE @columnname VARCHAR(MAX)
DECLARE @tablename SYSNAME
DECLARE @statsname SYSNAME
DECLARE @sql NVARCHAR(4000)
DECLARE @NAME VARCHAR(MAX)
declare @i INT
declare @j INT
create table #temp
(
tablename varchar(1000),
statsname varchar(1000),
columnname varchar(1000)
)
insert #temp(tablename,statsname,
SELECT DISTINCT
OBJECT_NAME(s.[object_id])
s.name AS StatName,
COALESCE(@NAME+ ', ', '')+c.name
FROM sys.stats s JOIN sys.stats_columns sc ON sc.[object_id] = s.[object_id] AND sc.stats_id = s.stats_id
JOIN sys.columns c ON c.[object_id] = sc.[object_id] AND c.column_id = sc.column_id
JOIN INFORMATION_SCHEMA.COLUMNS
JOIN sys.partitions par ON par.[object_id] = s.[object_id]
JOIN sys.objects obj ON par.[object_id] = obj.[object_id]
WHERE OBJECTPROPERTY(s.OBJECT_ID
AND D.DATA_TYPE IN('NTEXT','IMAGE')
create table #temp1
(
id int identity(1,1),
tablename varchar(8000),
statsname varchar(8000),
columnname varchar(8000)
)
insert #temp1(tablename,statsname
select tablename,statsname,stuff(
(
select ','+ [columnname] from #temp where
statsname = t.statsname for XML path('')
),1,1,'')
from (select distinct tablename,statsname from #temp )t
SELECT @i=1
SELECT @j=MAX(ID) FROM #temp1
WHILE(@I<=@J)
BEGIN
SELECT @statsname = statsname from #temp1 where id = @i
SELECT @tablename = tablename from #temp1 where id = @i
SELECT @columnname = columnname from #temp1 where id = @i
SET @sql = N'UPDATE STATISTICS '+QUOTENAME(@tablename)+QU
--PRINT @sql
EXEC sp_executesql @sql
SET @i = @i+1
END
DROP TABLE #temp
DROP TABLE #temp1
they just work DB by DB, I have to repeat a lot of time for all DB, so do it using one script is much better.