Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
В результате попытки "оптимизации" выполнение запросов на SQL Server 2005 замедлилось в 10 раз, после выполнения ночью 2 JOB'ов (были произведены без отключения соединений от базы, но в нерабочее время), выполнились успешно:

Job 1:

USE [msdb]
GO
/****** Object:  Job [Torg UnFullReindex]    Script Date: 07/29/2009 12:12:07 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 07/29/2009 12:12:07 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'Torg UnFullReindex', 
		@enabled=1, 
		@notify_level_eventlog=0, 
		@notify_level_email=0, 
		@notify_level_netsend=0, 
		@notify_level_page=0, 
		@delete_level=0, 
		@description=N'Reindex if Nessessary. Daily.', 
		@category_name=N'[Uncategorized (Local)]', 
		@owner_login_name=N'User2', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Step 1]    Script Date: 07/29/2009 12:12:08 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Step 1', 
		@step_id=1, 
		@cmdexec_success_code=0, 
		@on_success_action=1, 
		@on_success_step_id=0, 
		@on_fail_action=4, 
		@on_fail_step_id=2, 
		@retry_attempts=0, 
		@retry_interval=0, 
		@os_run_priority=0, @subsystem=N'TSQL', 
		@command=N'-- Ensure a USE <databasename> statement has been executed first.

SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130);
DECLARE @objectname nvarchar(130);
DECLARE @indexname nvarchar(130);
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command nvarchar(4000); 

DECLARE @db_id SMALLINT;
-- Тут прописываем имя базы
SET @db_id = DB_ID(N''Torg'');
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function
-- and convert object and index IDs to names.

SELECT
    object_id AS objectid,
    index_id AS indexid,
    partition_number AS partitionnum,
    avg_fragmentation_in_percent AS frag INTO #work_to_do FROM sys.dm_db_index_physical_stats (@db_id, NULL, NULL , NULL, ''LIMITED'') WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0; --В строке выше указываем процент фрагментации ниже которого таблицы не трогаем --и количество фрагментаций, процент может быть большой при маленьких индексах

-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;

-- Open the cursor.
OPEN partitions;

-- Loop through the partitions.
WHILE (1=1)
    BEGIN;
        FETCH NEXT
           FROM partitions
           INTO @objectid, @indexid, @partitionnum, @frag;
        IF @@FETCH_STATUS < 0 BREAK;
        SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
        FROM sys.objects AS o
        JOIN sys.schemas as s ON s.schema_id = o.schema_id
        WHERE o.object_id = @objectid;
        SELECT @indexname = QUOTENAME(name)
        FROM sys.indexes
        WHERE  object_id = @objectid AND index_id = @indexid;
        SELECT @partitioncount = count (*)
        FROM sys.partitions
        WHERE object_id = @objectid AND index_id = @indexid;

-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
        IF @frag < 30.0
            SET @command = N''ALTER INDEX '' + @indexname + N'' ON '' + @schemaname + N''.'' + @objectname + N'' REORGANIZE'';
        IF @frag >= 30.0
            SET @command = N''ALTER INDEX '' + @indexname + N'' ON '' + @schemaname + N''.'' + @objectname + N'' REBUILD'';
        IF @partitioncount > 1
            SET @command = @command + N'' PARTITION='' + CAST(@partitionnum AS nvarchar(10));
        EXEC (@command);
        PRINT N''Executed: '' + @command+N'' процент фрагментации был: ''+QUOTENAME(@frag);
		--PRINT N''Executed: '' + @command;
    END;

-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;

-- Drop the temporary table.
DROP TABLE #work_to_do;
GO
', 
		@database_name=N'Torg', 
		@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Step 2]    Script Date: 07/29/2009 12:12:08 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Step 2', 
		@step_id=2, 
		@cmdexec_success_code=0, 
		@on_success_action=1, 
		@on_success_step_id=0, 
		@on_fail_action=2, 
		@on_fail_step_id=0, 
		@retry_attempts=0, 
		@retry_interval=0, 
		@os_run_priority=0, @subsystem=N'TSQL', 
		@command=N'-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;

-- Drop the temporary table.
DROP TABLE #work_to_do;
GO
', 
		@database_name=N'master', 
		@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

Job 2:

USE [msdb]
GO
/****** Object:  Job [Torg updatestats]    Script Date: 07/29/2009 12:17:21 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 07/29/2009 12:17:21 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'Torg updatestats', 
		@enabled=1, 
		@notify_level_eventlog=0, 
		@notify_level_email=0, 
		@notify_level_netsend=0, 
		@notify_level_page=0, 
		@delete_level=0, 
		@description=N'No description available.', 
		@category_name=N'[Uncategorized (Local)]', 
		@owner_login_name=N'User1', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Step 1]    Script Date: 07/29/2009 12:17:22 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Step 1', 
		@step_id=1, 
		@cmdexec_success_code=0, 
		@on_success_action=3, 
		@on_success_step_id=0, 
		@on_fail_action=2, 
		@on_fail_step_id=0, 
		@retry_attempts=0, 
		@retry_interval=0, 
		@os_run_priority=0, @subsystem=N'TSQL', 
		@command=N'EXEC sp_updatestats
DBCC UPDATEUSAGE (N''Torg'')
DBCC FREEPROCCACHE
', 
		@database_name=N'Torg', 
		@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Step 2]    Script Date: 07/29/2009 12:17:22 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Step 2', 
		@step_id=2, 
		@cmdexec_success_code=0, 
		@on_success_action=1, 
		@on_success_step_id=0, 
		@on_fail_action=2, 
		@on_fail_step_id=0, 
		@retry_attempts=0, 
		@retry_interval=0, 
		@os_run_priority=0, @subsystem=N'TSQL', 
		@command=N'DBCC UPDATEUSAGE (N''Torg'')
DBCC FREEPROCCACHE
', 
		@database_name=N'Torg', 
		@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

На следующий день все запросы начали выполняться в 10 раз дольше.

Что удалось установить:

1) При разворачивании бэкапа копии базы на другой SQL сервер, время выполнения запросов пришло в норму.
2) При разворачивании бэкапа копии базы на этот же SQL сервер время выполнения не изменилось.
3) При разворачивании бэкапа копии базы на другой SQL сервер в пределах того же сервера, время выполнения запросов пришло в норму.

Предварительный вывод: проблема не в БД, а либо в системных БД, либо в самом SQL Server'е


WS2003EE, W2005SQLServer SP2
Dual Core AMD Opteron, 2.20GHZ,4GB RAM
SCSI RAID

Запрос для анализа:
SELECT СчетАкт.IDDOC [Документ $Документ.СчетАкт]
FROM  _1SJOURN AS Журнал With (NOLOCK)
INNER JOIN dh1254 AS СчетАкт With (NOLOCK) ON СчетАкт.IDDOC = Журнал.IDDOC
LEFT JOIN sc1653 AS АМКлиентов With (NOLOCK) ON СчетАкт.sp1262 = АМКлиентов.ID
WHERE 
((
select top 1
left(c4520_vv.value, 10)
from
_1sconst as c4520_vv (nolock)
where
c4520_vv.id = 4520 and
c4520_vv.objid = АМКлиентов.ID and
(c4520_vv.date <= '20090729')
order by c4520_vv.date desc, c4520_vv.time desc, c4520_vv.docid desc, c4520_vv.row_id desc
) LIKE '%'+'у569'+'%')
AND (Журнал.DATE_TIME_IDDOC between '20090101' AND '20090831Z')

План выполнения на проблемном сервере

  |--Filter(WHERE:([Expr1010] like '%у569%'))
|--Nested Loops(Left Outer Join, OUTER REFERENCES:([АМКлиентов].[ID]))
|--Hash Match(Right Outer Join, HASH:([АМКлиентов].[ID])=([СчетАкт].[SP1262]), RESIDUAL:([Torg].[dbo].[DH1254].[SP1262] as [СчетАкт].[SP1262]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID]))
| |--Index Scan(OBJECT:([Torg].[dbo].[SC1653].[IDD] AS [АМКлиентов]))
| |--Hash Match(Inner Join, HASH:([СчетАкт].[IDDOC])=([Журнал].[IDDOC]), RESIDUAL:([Torg].[dbo].[_1SJOURN].[IDDOC] as [Журнал].[IDDOC]=[Torg].[dbo].[DH1254].[IDDOC] as [СчетАкт].[IDDOC]))
| |--Clustered Index Scan(OBJECT:([Torg].[dbo].[DH1254].[PK_DH1254] AS [СчетАкт]))
| |--Hash Match(Inner Join, HASH:([Журнал].[ROW_ID])=([Журнал].[ROW_ID]))
| |--Index Seek(OBJECT:([Torg].[dbo].[_1SJOURN].[ACDATETIME] AS [Журнал]), SEEK:([Журнал].[DATE_TIME_IDDOC] >= '20090101' AND [Журнал].[DATE_TIME_IDDOC] <= '20090831Z') ORDERED FORWARD)
| |--Index Scan(OBJECT:([Torg].[dbo].[_1SJOURN].[IDDOC] AS [Журнал]))
|--Index Spool(SEEK:([АМКлиентов].[ID]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID]))
|--Top(TOP EXPRESSION:((1)))
|--Compute Scalar(DEFINE:([Expr1009]=tertiary_weights([Torg].[dbo].[_1SCONST].[DOCID] as [c4520_vv].[DOCID]), [Expr1010]=substring([Torg].[dbo].[_1SCONST].[VALUE] as [c4520_vv].[VALUE],(1),(10))))
|--Nested Loops(Inner Join, OUTER REFERENCES:([c4520_vv].[ROW_ID]))
|--Index Seek(OBJECT:([Torg].[dbo].[_1SCONST].[IDD] AS [c4520_vv]), SEEK:([c4520_vv].[ID]=(4520) AND [c4520_vv].[OBJID]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID] AND [c4520_vv].[DATE] <= '2009-07-29 00:00:00.000') ORDERED BACKWARD)
|--Clustered Index Seek(OBJECT:([Torg].[dbo].[_1SCONST].[PK__1SCONST] AS [c4520_vv]), SEEK:([c4520_vv].[ROW_ID]=[Torg].[dbo].[_1SCONST].[ROW_ID] as [c4520_vv].[ROW_ID]) LOOKUP ORDERED FORWARD)

Статистика клиента на проблемном сервере

Trial 2Trial 1Average
Client Execution Time12:34:4412:30:37
Query Profile Statistics
-- Number of INSERT, DELETE and UPDATE statements000.0000
-- Rows affected by INSERT, DELETE, or UPDATE statements000.0000
-- Number of SELECT statements222.0000
-- Rows returned by SELECT statements101010.0000
-- Number of transactions000.0000
Network Statistics
-- Number of server roundtrips333.0000
-- TDS packets sent from client333.0000
-- TDS packets received from server131313.0000
-- Bytes sent from client140614061406.0000
-- Bytes received from server410834108341083.0000
Time Statistics
-- Client processing time03115.5000
-- Total execution time623458276030.5000
-- Wait time on server replies623457966015.0000


План выполнения на нормальном сервере

  |--Parallelism(Gather Streams)
|--Filter(WHERE:([Expr1010] like '%у569%'))
|--Nested Loops(Left Outer Join, OUTER REFERENCES:([АМКлиентов].[ID]))
|--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([АМКлиентов].[ID]))
| |--Hash Match(Right Outer Join, HASH:([АМКлиентов].[ID])=([СчетАкт].[SP1262]), RESIDUAL:([TorgJuly28].[dbo].[DH1254].[SP1262] as [СчетАкт].[SP1262]=[TorgJuly28].[dbo].[SC1653].[ID] as [АМКлиентов].[ID]))
| |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([АМКлиентов].[ID]))
| | |--Index Scan(OBJECT:([TorgJuly28].[dbo].[SC1653].[IDD] AS [АМКлиентов]))
| |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([СчетАкт].[SP1262]))
| |--Hash Match(Inner Join, HASH:([СчетАкт].[IDDOC])=([Журнал].[IDDOC]), RESIDUAL:([TorgJuly28].[dbo].[_1SJOURN].[IDDOC] as [Журнал].[IDDOC]=[TorgJuly28].[dbo].[DH1254].[IDDOC] as [СчетАкт].[IDDOC]))
| |--Bitmap(HASH:([СчетАкт].[IDDOC]), DEFINE:([Bitmap1012]))
| | |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([СчетАкт].[IDDOC]))
| | |--Clustered Index Scan(OBJECT:([TorgJuly28].[dbo].[DH1254].[PK_DH1254] AS [СчетАкт]))
| |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([Журнал].[IDDOC]), WHERE:(PROBE([Bitmap1012])=TRUE))
| |--Hash Match(Inner Join, HASH:([Журнал].[ROW_ID])=([Журнал].[ROW_ID]))
| |--Bitmap(HASH:([Журнал].[ROW_ID]), DEFINE:([Bitmap1011]))
| | |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([Журнал].[ROW_ID]))
| | |--Index Seek(OBJECT:([TorgJuly28].[dbo].[_1SJOURN].[ACDATETIME] AS [Журнал]), SEEK:([Журнал].[DATE_TIME_IDDOC] >= '20090101' AND [Журнал].[DATE_TIME_IDDOC] <= '20090831Z') ORDERED FORWARD)
| |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([Журнал].[ROW_ID]), WHERE:(PROBE([Bitmap1011])=TRUE) [IN ROW])
| |--Index Scan(OBJECT:([TorgJuly28].[dbo].[_1SJOURN].[IDDOC] AS [Журнал]))
|--Index Spool(SEEK:([АМКлиентов].[ID]=[TorgJuly28].[dbo].[SC1653].[ID] as [АМКлиентов].[ID]))
|--Top(TOP EXPRESSION:((1)))
|--Compute Scalar(DEFINE:([Expr1009]=tertiary_weights([TorgJuly28].[dbo].[_1SCONST].[DOCID] as [c4520_vv].[DOCID]), [Expr1010]=substring([TorgJuly28].[dbo].[_1SCONST].[VALUE] as [c4520_vv].[VALUE],(1),(10))))
|--Nested Loops(Inner Join, OUTER REFERENCES:([c4520_vv].[ROW_ID]))
|--Index Seek(OBJECT:([TorgJuly28].[dbo].[_1SCONST].[IDD] AS [c4520_vv]), SEEK:([c4520_vv].[ID]=(4520) AND [c4520_vv].[OBJID]=[TorgJuly28].[dbo].[SC1653].[ID] as [АМКлиентов].[ID] AND [c4520_vv].[DATE] <= '2009-07-29 00:00:00.000') ORDERED BACKWARD)
|--Clustered Index Seek(OBJECT:([TorgJuly28].[dbo].[_1SCONST].[PK__1SCONST] AS [c4520_vv]), SEEK:([c4520_vv].[ROW_ID]=[TorgJuly28].[dbo].[_1SCONST].[ROW_ID] as [c4520_vv].[ROW_ID]) LOOKUP ORDERED FORWARD)

Статистика клиента на нормальном сервере:

Trial 2Trial 1Average
Client Execution Time13:13:5513:13:49
Query Profile Statistics
-- Number of INSERT, DELETE and UPDATE statements000.0000
-- Rows affected by INSERT, DELETE, or UPDATE statements00 0.0000
-- Number of SELECT statements222.0000
-- Rows returned by SELECT statements262626.0000
-- Number of transactions000.0000
Network Statistics
-- Number of server roundtrips555.0000
-- TDS packets sent from client555.0000
-- TDS packets received from server777.0000
-- Bytes sent from client162416241624.0000
-- Bytes received from server864886488648.0000
Time Statistics
-- Client processing time151515.0000
-- Total execution time151515.0000
-- Wait time on server replies0 00.0000


Где-то год назад помню мы какую-то статистику убивали, так вот, может я ее восстановил, подозреваю, что SQL 2005 со статистикой не очень дружит.

У кого какие мнения, в чем проблема может быть?
29 июл 09, 13:28    [7473603]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Вот у вас во втором плане куча Parallelism-ов, чего нет в первом...
Ни о чем не говорит?
Серверу как раз не хватает статистики, чтобы построить оптимальный план...
Статистику принудительно для случая с замедлением не пробовали обновлять?
29 июл 09, 13:37    [7473678]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
постройте полный план с циферками. чтобы было видно какой шаг для сервера наиболее проблематичный.
вообще мне не нравится TableSpool.
плюс ко всему перепишите запрос.

для спящего время бодрствования равносильно сну
29 июл 09, 13:55    [7473826]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
RowsExecutesStmtTextStmtIDNodeIdParentPhysicalOpLogicalOpArgumentDefinedValueEstimateRowsEstimateIOEstimateCPUAvgRowSizeTotalSubTreeCostOutputListWarningsTypeParallelEstimateExecutions
91Полный текст запроса110NULLNULLNULLNULL6,16993NULLNULLNULL249,5187NULLNULLSELECT0NULL
91 |--Filter(WHERE:([Expr1010] like '%у569%'))121FilterFilterWHERE:([Expr1010] like '%у569%')NULL6,1699300,339074716249,5187[СчетАкт].[IDDOC]NULLPLAN_ROW01
595411 |--Nested Loops(Left Outer Join, OUTER REFERENCES:([АМКлиентов].[ID]))132Nested LoopsLeft Outer JoinOUTER REFERENCES:([АМКлиентов].[ID])NULL385312,201,61060525249,1796[СчетАкт].[IDDOC], [Expr1010]NULLPLAN_ROW01
595411 |--Hash Match(Right Outer Join, HASH:([АМКлиентов].[ID])=([СчетАкт].[SP1262]), RESIDUAL:([Torg].[dbo].[DH1254].[SP1262] as [СчетАкт].[SP1262]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID]))143Hash MatchRight Outer JoinHASH:([АМКлиентов].[ID])=([СчетАкт].[SP1262]), RESIDUAL:([Torg].[dbo].[DH1254].[SP1262] as [СчетАкт].[SP1262]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID])NULL385312,204,4479525128,708[СчетАкт].[IDDOC], [АМКлиентов].[ID]NULLPLAN_ROW01
896981 | |--Index Scan(OBJECT:([Torg].[dbo].[SC1653].[IDD] AS [АМКлиентов]))154Index ScanIndex ScanOBJECT:([Torg].[dbo].[SC1653].[IDD] AS [АМКлиентов])[АМКлиентов].[ID]896980,13423610,0988248160,2330609[АМКлиентов].[ID]NULLPLAN_ROW01
595411 | |--Hash Match(Inner Join, HASH:([СчетАкт].[IDDOC])=([Журнал].[IDDOC]), RESIDUAL:([Torg].[dbo].[_1SJOURN].[IDDOC] as [Журнал].[IDDOC]=[Torg].[dbo].[DH1254].[IDDOC] as [СчетАкт].[IDDOC]))164Hash MatchInner JoinHASH:([СчетАкт].[IDDOC])=([Журнал].[IDDOC]), RESIDUAL:([Torg].[dbo].[_1SJOURN].[IDDOC] as [Журнал].[IDDOC]=[Torg].[dbo].[DH1254].[IDDOC] as [СчетАкт].[IDDOC])NULL385312,2013,9047725124,027[СчетАкт].[IDDOC], [СчетАкт].[SP1262]NULLPLAN_ROW01
4077881 | |--Clustered Index Scan(OBJECT:([Torg].[dbo].[DH1254].[PK_DH1254] AS [СчетАкт]))176Clustered Index ScanClustered Index ScanOBJECT:([Torg].[dbo].[DH1254].[PK_DH1254] AS [СчетАкт])[СчетАкт].[IDDOC], [СчетАкт].[SP1262]40778560,414980,44872052560,8637[СчетАкт].[IDDOC], [СчетАкт].[SP1262]NULLPLAN_ROW01
7309651 | |--Hash Match(Inner Join, HASH:([Журнал].[ROW_ID])=([Журнал].[ROW_ID]))196Hash MatchInner JoinHASH:([Журнал].[ROW_ID])=([Журнал].[ROW_ID])NULL688514,4032,469221649,25853[Журнал].[IDDOC]NULLPLAN_ROW01
7309651 | |--Index Seek(OBJECT:([Torg].[dbo].[_1SJOURN].[ACDATETIME] AS [Журнал]), SEEK:([Журнал].[DATE_TIME_IDDOC] >= '20090101' AND [Журнал].[DATE_TIME_IDDOC] <= '20090831Z') ORDERED FORWARD)1109Index SeekIndex SeekOBJECT:([Torg].[dbo].[_1SJOURN].[ACDATETIME] AS [Журнал]), SEEK:([Журнал].[DATE_TIME_IDDOC] >= '20090101' AND [Журнал].[DATE_TIME_IDDOC] <= '20090831Z') ORDERED FORWARD[Журнал].[ROW_ID]688514,41,9001620,7575228112,657685[Журнал].[ROW_ID]NULLPLAN_ROW01
55106421 | |--Index Scan(OBJECT:([Torg].[dbo].[_1SJOURN].[IDDOC] AS [Журнал]))1119Index ScanIndex ScanOBJECT:([Torg].[dbo].[_1SJOURN].[IDDOC] AS [Журнал])[Журнал].[ROW_ID], [Журнал].[IDDOC]55106138,0697926,0618312014,13162[Журнал].[ROW_ID], [Журнал].[IDDOC]NULLPLAN_ROW01
5951659541 |--Index Spool(SEEK:([АМКлиентов].[ID]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID]))1183Index SpoolLazy SpoolSEEK:([АМКлиентов].[ID]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID])NULL10,0031250,000258201216118,861[Expr1010]NULLPLAN_ROW0385312,2
2648526487 |--Top(TOP EXPRESSION:((1)))11918TopTopTOP EXPRESSION:((1))NULL101E-071618,87293[Expr1010]NULLPLAN_ROW038971,88
00 |--Compute Scalar(DEFINE:([Expr1009]=tertiary_weights([Torg].[dbo].[_1SCONST].[DOCID] as [c4520_vv].[DOCID]), [Expr1010]=substring([Torg].[dbo].[_1SCONST].[VALUE] as [c4520_vv].[VALUE],(1),(10))))12019Compute ScalarCompute ScalarDEFINE:([Expr1009]=tertiary_weights([Torg].[dbo].[_1SCONST].[DOCID] as [c4520_vv].[DOCID]), [Expr1010]=substring([Torg].[dbo].[_1SCONST].[VALUE] as [c4520_vv].[VALUE],(1),(10)))[Expr1009]=tertiary_weights([Torg].[dbo].[_1SCONST].[DOCID] as [c4520_vv].[DOCID]), [Expr1010]=substring([Torg].[dbo].[_1SCONST].[VALUE] as [c4520_vv].[VALUE],(1),(10))101,91627E-075218,86904[c4520_vv].[ROW_ID], [c4520_vv].[DATE], [c4520_vv].[DOCID], [c4520_vv].[TIME], [Expr1009], [Expr1010]NULLPLAN_ROW038971,88
2648526487 |--Nested Loops(Inner Join, OUTER REFERENCES:([c4520_vv].[ROW_ID]))12120Nested LoopsInner JoinOUTER REFERENCES:([c4520_vv].[ROW_ID])NULL108,010006E-064118,86514[c4520_vv].[ROW_ID], [c4520_vv].[DATE], [c4520_vv].[VALUE], [c4520_vv].[DOCID], [c4520_vv].[TIME]NULLPLAN_ROW038971,88
2648526487 |--Index Seek(OBJECT:([Torg].[dbo].[_1SCONST].[IDD] AS [c4520_vv]), SEEK:([c4520_vv].[ID]=(4520) AND [c4520_vv].[OBJID]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID] AND [c4520_vv].[DATE] <= '2009-07-29 00:00:00.000') ORDERED BACKWARD)12221Index SeekIndex SeekOBJECT:([Torg].[dbo].[_1SCONST].[IDD] AS [c4520_vv]), SEEK:([c4520_vv].[ID]=(4520) AND [c4520_vv].[OBJID]=[Torg].[dbo].[SC1653].[ID] as [АМКлиентов].[ID] AND [c4520_vv].[DATE] <= '2009-07-29 00:00:00.000') ORDERED BACKWARD[c4520_vv].[ROW_ID], [c4520_vv].[DATE], [c4520_vv].[DOCID], [c4520_vv].[TIME]10,0031250,0001591079327,229678[c4520_vv].[ROW_ID], [c4520_vv].[DATE], [c4520_vv].[DOCID], [c4520_vv].[TIME]NULLPLAN_ROW038971,88
2648526485 |--Clustered Index Seek(OBJECT:([Torg].[dbo].[_1SCONST].[PK__1SCONST] AS [c4520_vv]), SEEK:([c4520_vv].[ROW_ID]=[Torg].[dbo].[_1SCONST].[ROW_ID] as [c4520_vv].[ROW_ID]) LOOKUP ORDERED FORWARD)12421Clustered Index SeekClustered Index SeekOBJECT:([Torg].[dbo].[_1SCONST].[PK__1SCONST] AS [c4520_vv]), SEEK:([c4520_vv].[ROW_ID]=[Torg].[dbo].[_1SCONST].[ROW_ID] as [c4520_vv].[ROW_ID]) LOOKUP ORDERED FORWARD[c4520_vv].[VALUE]10,0031250,000158113811,47268[c4520_vv].[VALUE]NULLPLAN_ROW057607



2Алексей2003: Проблемы в этом запросе, из-за того что индекса не хватает, а вот вторую часть с выбором по Like я даже не знаю, что можно сделать. Full Text Search мне в этом поможет?

2tpg: Похоже проблема действительно в статистике, длительность запросов по-тихоньку уменьшается. А как принудительно обновлять статистику?
29 июл 09, 15:28    [7474647]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
как то так.
SELECT СчетАкт.IDDOC [Документ $Документ.СчетАкт]
FROM  _1SJOURN AS Журнал With (NOLOCK)
INNER JOIN dh1254 AS СчетАкт With (NOLOCK) ON СчетАкт.IDDOC = Журнал.IDDOC
LEFT JOIN sc1653 AS АМКлиентов With (NOLOCK) ON СчетАкт.sp1262 = АМКлиентов.ID
join (select top 1 with ties c4520_vv.objid, left(c4520_vv.value, 10) value
 from _1sconst as c4520_vv (nolock)
 where
   c4520_vv.id = 4520 and
   (c4520_vv.date <= '20090729')
 order by row_number() over (partition by c4520_vv.objid order by c4520_vv.date desc, c4520_vv.time desc, c4520_vv.docid desc, c4520_vv.row_id desc)
  ) t on АМКлиентов.ID = t.objid
WHERE t.value like '%'+'у569'+'%'
AND (Журнал.DATE_TIME_IDDOC between '20090101' AND '20090831Z')

операция like занимает мало времени. и подобный like не оптимизируется.

для спящего время бодрствования равносильно сну
29 июл 09, 15:40    [7474729]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Anreko
А как принудительно обновлять статистику?
EXEC sp_updatestats 
30 июл 09, 06:24    [7476527]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
ererererer1
Guest
во втором джобе у вас выполняется операция - freeprocash - то есть уничтожаются все элементы из кэша планов выполнения. поэтому неудивительно, что у вас спад производительности. вместо этого обновляйте просто статистику по каждой переиндексированной таблице
30 июл 09, 12:25    [7478353]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
ererererer1, так оно так, но у меня тормозит не только при первом выполнении, смотрите статистику по клиенту.
30 июл 09, 17:20    [7480697]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а вы пробовали запустить мой запрос?

для спящего время бодрствования равносильно сну
30 июл 09, 17:38    [7480872]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
Алексей2003,
Да попробовал, получилось пошустрее.
30 июл 09, 18:53    [7481345]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
Сегодня попробую еще раз джобы запустить:
В первом добавил обновление статистики по реиндексируемым индексам;
Во втором убрал очитску процедурного кэша и добавил разделители GO;
Также добавил пару индексов.
2Алексей2003: Стыдно признаться, но я пока не разобрался в запросе, но работает он намного быстрее и даже без индекса производит меньше чтений, так что завтра наверное разберусь и тоже внедрю.
30 июл 09, 19:22    [7481467]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
гляньте полный план. и количество вызовов таблички 1sconst и будет все понятно.

для спящего время бодрствования равносильно сну
30 июл 09, 20:14    [7481592]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
ererererer1
Guest
да не в этом дело Анреко, просто после этого вы заносите в кэш дурной план и дальше с ним мучаетесь
30 июл 09, 20:56    [7481677]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
ererererer1,
То есть чистить процедурный кэш каждый день нужно или чистить его надо постоянно, чтобы MS SQL подбирал оптимальный план?
31 июл 09, 07:50    [7482412]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запросов замедлилось в 10 раз.  [new]
Anreko
Member

Откуда:
Сообщений: 11
Поставил каждые 3 часа выполнять

EXEC sp_updatestats
GO
DBCC UPDATEUSAGE (0)
GO
DBCC FREEPROCCACHE

Еще возникла проблема:
было некорректно завершена установка SP 3 на MS SQL 2005, после этого установка этого SP 3 не проходит, так как запомнила где-то старый временный каталог 0a3bb4097adff9ed208354, при копировании нового каталога возвращает ошибку на неправильный код пакета(невозможность получения кода пакета)

MSI (s) (E4:C8) [07:37:54:737]: SOURCEMGMT: Trying source d:\0a3bb4097adff9ed208354\HotFixSQL\Files\.
MSI (s) (E4:C8) [07:37:54:737]: Note: 1: 2219 2: d:\0a3bb4097adff9ed208354\HotFixSQL\Files\sqlrun_sql.msp 3: 4:
MSI (s) (E4:C8) [07:37:54:737]: SOURCEMGMT: Source is invalid due to invalid package code (can not get product code).

Вопрос, где надо стереть этот запомненный временный каталог?
31 июл 09, 10:12    [7482835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить