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

Откуда:
Сообщений: 4
Добрый день, как долго должна обновляться статистика ("Вся собранная статистика", "Полный просмотр") для БД 1С 8.2 ~30гб? На данный момент это занимает 1 час 40 мин на не загруженном сервере и при этом время выполнения запросов к БД увеличивается вдвое, если не втрое. Ошибок в логах нет. В какую сторону смотреть?
Я ведь так понимаю раз у меня в настройках базы стоит автоматическое обновление статистики, то возможно оно идет постоянно, так как не успевает заканчивать предыдущую задачу.

ALTER DATABASE proizv SET AUTO_SHRINK OFF; и exec sp_configure 'default trace enabled', 0 делал.


MS SQL 2008 v 10.0.5500 64 bit
Windows Server 2008 standart 64-bit

Server:
1 x Xeon E5520 2.3 Ghz
16 Gb DDR 2
Raid 5
Выделено памяти под SQL 12Gb

На всякий случай:
+

wait type time(s)%
REQUEST_FOR_DEADLOCK_SEARCH442516.69
XE_TIMER_EVENT441016.63
FT_IFTS_SCHEDULER_IDLE_WAIT438016.52
LOGMGR_QUEUE430816.25
XE_DISPATCHER_WAIT351013.24
CHECKPOINT_QUEUE26179.87
BROKER_TO_FLUSH22148.35
PAGEIOLATCH_SH3401.28 <- логи от баз скоро разнесу на разные рейды. А для Tеmpdb купим SSD диск.
WRITELOG720.27
IO_COMPLETION440.17
PREEMPTIVE_OS_FILEOPS380.14
MSQL_XP310.12
PREEMPTIVE_OS_GETPROCADDRESS310.12
LATCH_SH310.12
LOGBUFFER260.10
ASYNC_NETWORK_IO100.04
PAGEIOLATCH_UP60.02
PREEMPTIVE_OS_WRITEFILEGATHER40.02
PAGEIOLATCH_EX40.02
SOS_SCHEDULER_YIELD20.01
База данных Логическое имя Прочитано(Мб) Записано(Мб)Путь
Proizv_updateproizv81590E:\Databases\Proizv_update.mdf
Proizvproizv42642655E:\Databases\Proizv.mdf <- Эта база основная
tempdbtempdev16042014E:\Databases\tempdb.mdf
tempdbtemplog0126E:\Sql_log\templog.ldf
TestPRTestPR_log092E:\Sql_log\TestPR_log.ldf
UPP2_convertUPP2_convert590E:\Databases\UPP2_convert.mdf
TestPRTestPR343E:\Databases\TestPR.mdf
Proizvproizv_log118E:\Sql_log\proizv.ldf
Dimaproizv30E:\Databases\Dima.mdf
Uchebkaproizv30E:\Databases\Uchebka.mdf

8 окт 12, 01:13    [13281873]     Ответить | Цитировать Сообщить модератору
 Re: Время обновления статистики?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Да, примерно столько оно выполняться и будет. Навскидку вижу 2 варианта действий:

1. Зря включили FULLSCAN при обновлении статистики. Сначала стоило оставить дефолтный режим и только если он не устроит, что-то менять.
2. Возможно, проблема не в неактуальности статистики, а в фрагментации индексов. Это смотрели?
8 окт 12, 07:52    [13282090]     Ответить | Цитировать Сообщить модератору
 Re: Время обновления статистики?  [new]
Centraloff
Member

Откуда: Екатеринбург
Сообщений: 138
it-orlov,

У нас также база весит ~30Гб, также стоит автоматическое обновление статистики.По времени выполняется 6-8 минут.
Параметры сервера схожи, но диски у нас в 10 рейде.
8 окт 12, 08:50    [13282230]     Ответить | Цитировать Сообщить модератору
 Re: Время обновления статистики?  [new]
it-orlov
Member

Откуда:
Сообщений: 4
Ennor Tiegael
Да, примерно столько оно выполняться и будет. Навскидку вижу 2 варианта действий:

1. Зря включили FULLSCAN при обновлении статистики. Сначала стоило оставить дефолтный режим и только если он не устроит, что-то менять.
2. Возможно, проблема не в неактуальности статистики, а в фрагментации индексов. Это смотрели?

1. Попробую поменять.

2. В общем, я на это и обратил внимание, когда создал план обслуживания...
Каждую ночь, кроме воскресенья:
Проверка целостности -> Обновление статистики -> DBCC FREEPROCCACHE -> Реорганизация индекса -> DBCC SHRINKFILE (N'*_log,0) -> Бэкап
Воскресенье:
Проверка целостности -> Перестроение индекса -> DBCC SHRINKFILE (N'*_log,0) -> Бэкап

Для 3-х баз (30 Gb, 20 Gb, 1,5 Gb) весь этот процесс занял 7 часов 30 мин, после двух выполнений время сократилось до 5 часов. До перестроения индекса так и не добрался решил сначала разобраться с обновлением статистики.
8 окт 12, 09:16    [13282315]     Ответить | Цитировать Сообщить модератору
 Re: Время обновления статистики?  [new]
it-orlov
Member

Откуда:
Сообщений: 4
Centraloff
it-orlov,

У нас также база весит ~30Гб, также стоит автоматическое обновление статистики.По времени выполняется 6-8 минут.
Параметры сервера схожи, но диски у нас в 10 рейде.


Тоже пока думаю в сторону дисков, так как PAGEIOLATCH_SH 340 сек за 1,5 часа слишком высокий показатель, как мне кажется.
8 окт 12, 09:18    [13282317]     Ответить | Цитировать Сообщить модератору
 Re: Время обновления статистики?  [new]
it-orlov
Member

Откуда:
Сообщений: 4
В итоге решил сделать так:
Сделал проверку целостности -> Бэкап -> Перестроение индекса -> Обновление статистики -> DBCC FREEPROCCACHE -> Реорганизация индекса
Заняло это все 7 часов.
В итоге решил обновление статистики доверить автоматическим механизмам sql 2008, а профилактику делать следующим образом:
Проверка целостности БД -> Скрипт -> Бэкап + Шринк логов

Скрипт (взято от сюда):
+
/*Скрипт автоматически реорганизуют или перестраивает все секции индексов в базе данных

 со средней степенью фрагментации более 10 процентов. 

 Если < 30% - реорганизация, если >= 30 - перестроение.

*/

USE Proizv;

GO

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);

PRINT N' ';

PRINT N'BEGIN: '+CONVERT (CHAR,GETDATE(),120);

-- Получаем данные о таблицах и индексах из sys.dm_db_index_physical_stats

-- и конвертируем полученные ИД в имена объектов.

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 partitions CURSOR FOR SELECT * FROM #work_to_do;

 

-- Открываем курсор

OPEN 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 % точка переключения между реорганизацией и перестроением индексов

        IF @frag < 30

            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';

        IF @frag >= 30

            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR=90)';

        IF @partitioncount > 1

            SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));

        PRINT RTRIM (CONVERT (CHAR,GETDATE(),108))+ N' : ' + @command;

        EXEC (@command);

    END;

 

-- Закрыть и удалить из памяти курсор.

CLOSE partitions;

DEALLOCATE partitions;

 

-- Удаление временной таблицы.

DROP TABLE #work_to_do;

 

PRINT N'END: '+CONVERT (CHAR,GETDATE(),120);

PRINT N'*******************************************************';


Может кому пригодиться...
P.S.
1. Как думаете этого будет достаточно для нормальной работы?
2. И стоит ли доверять обновление статистики механизмам SQL или лучше все таки в ручную делать?
10 окт 12, 09:30    [13293769]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить