並列クエリ処理は、保存されたクエリ プランで並列処理が可能であることを示していますが、特定の数のスレッドに具体的に関連付けられているわけではありません。
統計を更新した後など、新しいクエリ プランを定期的にコンパイルする理由は他にもあるかもしれません。ストアド プロシージャは、すべてのストアド プロシージャを再コンパイル用にマークするようにスケジュールできます。私は次のことでいくつかの成功を収めました:
create procedure [dbo].[INUpdateStatistics]
as
set nocount on
create table #Tables ( Table_Qualifier sysname, Table_Owner sysname, Table_Name sysname, Table_Type VarChar(32), Remarks VarChar(254) )
declare CTable cursor local for select Table_Name, Table_Owner, Table_Type from #Tables order by Table_Name
declare @TableName as sysname
declare @TableOwner as sysname
declare @TableType as sysname
-- Get the list of tables in the database.
insert into #Tables exec sp_tables
open CTable
fetch next from CTable into @TableName, @TableOwner, @TableType
-- For each table ... .
while @@Fetch_Status = 0
begin
if @TableOwner = 'dbo' and @TableType = 'TABLE'
begin
-- Update statistics for all user tables.
execute( 'update statistics [' + @TableName + '] with fullscan, all' )
-- Recompile all stored procedures and triggers when they are next executed.
exec sp_recompile @objname = @TableName
-- Throttle the loop.
waitfor delay '00:00:01'
end
fetch next from CTable into @TableName, @TableOwner, @TableType
end
-- Houseclean.
close CTable
deallocate CTable
drop table #Tables