Обслуживание индексов и статистик MS SQL Server

Опубликовал speshuric в раздел Администрирование - Сервисные утилиты

Готовый и эффективный скрипт для регулярного обслуживания индексов и статистик.

 

Обслуживание индексов и статистик MS SQL Server

Эта статья написана для администраторов, обслуживающих сервера СУБД MS SQL Server, которые используются вместе с 1С:Предприятием. Статья скорее практическая, чем разъяснительная, но я постарался хотя бы кратко обосновать те или иные решения, хотя большая часть информации дана несколько упрощенно и поверхностно.

Индексы и статистики в MS SQL Server — основа эффективного выполнения запросов. Без них сервер не сможет выполнять запросы за разумное время.

Статистика — небольшая таблица, до 200 строк, в которой хранится обобщенная информация о том, какие значения и как часто встречаются в таблице. На основании статистики сервер принимает решение, какой индекс использовать при выполнении запроса.

Индекс — особым образом структурированные данные (хранящиеся в базе данных), которые позволяют быстро найти нужные записи. Устроен он примерно так, как оглавление в книге или предметный указатель. Большинство баз данных 1С по объёму более чем наполовину состоят из индексов. Для каждого индекса обязательно хранится его статистика.

За подробностями внутреннего устройства, как обычно отсылаю в BOL:

В целом MS SQL Server сам справляется с поддержкой целостности и эффективности статистик и индексов, но если никак ему не помогать, то постепенно накапливаются следующие проблемы:

  • Статистика становится существенно неточной, причем это выясняется сервером именно в тот момент, когда она нужна.
  • Индексы становятся сильно фрагментированными и перемешанными.
  • Часть данных на строк, когда-то участвовавших в индексе уже удалена, и из-за этого индекс занимает на диске больше места и требует при выполнении запросов больше операций ввода-вывода.

Для того, чтобы эти накопленные эффекты не влияли на производительность, рекомендуется выполнять регламентное обслуживание статистик и индексов. Так затратив ресурсы на обновление и упорядочивание данных в незагруженное время мы скорее всего не столкнёмся с проблемами во время интенсивной эксплуатации.

Стоит учесть, что 1C для облегчения переносимости архитектуры между разными видами СУБД использует лишь небольшую часть современных возможностей индексирования MS SQL Server. За счет этого обслуживание индексов и статистик несколько упрощается.

Итак, что такое это "обслуживание"? Всё просто.

  • Статистика просто пересчитывается. Читается вся таблица или часть случайно выбранных страниц и полностью пересчитывается статистика.
  • Индексы могут быть дефрагментированы двумя способами:
    • Перестроение — полное построение индекса. При этом обычно станицы становятся максимально плотно забиты данными, а статистика обязательно обновляется (всё равно все данные читать). Обычно данные индексированные данные полностью недоступны при перестроении индекса.
    • Реорганизация — серия небольших локальных перемещений страниц так, чтобы индекс не был фрагментирован. При этом статистика не пересчитывается, данные всё время выполнения доступны (точнее, недоступна лишь совсем небольшая часть в каждый момент времени). Но при большой степени фрагментации эта процедура значительно дольше.

Для обслуживания есть специальные "кирпичики" в планах обслуживания (maitenance plan), которые так и называются:

  • Update Statistics Task
  • Rebuild Index Task
  • Reorganize Index Task

Казалось бы всё просто: накидал кирпичиков, соединил стрелочкой и поехали. Такое решение возможно, но оно очень неэффективно:

  1. Индексы перестраиваются/реорганизуются только все сразу в данной базе. То есть даже если таблица никогда не меняется, её индексы будут перестраиваться. Это очень расточительно, а при полной модели восстановления еще и приводит к огромному росту журналов транзакций.
  2. Статистики тоже перестраиваются вне зависимости от актуальности, причем даже если они были только что обновлены при перестроении индексов.
  3. Нет никаких гарантий, что операция обслуживания завершится за то время, которое вы ей выделили.

Решение очень простое: пишется свой скрипт обслуживания, который убирает эти ограничения. Такой скрипт можно запускать из задания (job) MS SQL Server Agent или из "кирпичика" Execute T-SQL Statement Task в планах обслуживания (кому как удобнее). В интернете можно найти много подобных скриптов (в простейшем виде они даже в документации есть), но мне ни один не подошёл, и поэтому я пользуюсь своим "велосипедом". Этот скрипт и приведён ниже. Он подходит без изменений для большинства баз данных 1С до примерно 0,5-0,7 ТБ (дальше его уже лучше немного доработать, если кому-то интересно/актуально могу пояснить в комментариях).

Особенности скрипта:

  1. Как и в большинстве подобных скриптов, анализируется динамическое представление sys.dm_db_index_physical_stats, по которому выясняется степень фрагментации и заполненности страниц индекса.
  2. Можно задать для обработки лишь часть баз данных, можно, наоборот, исключить некоторые БД из обслуживания.
  3. Контролируется время выполнения скрипта.
  4. Очень грубо, но оценивается размер записи в журналы транзакций.
  5. Есть возможность исключить из обработки совсем небольшие таблицы.
  6. У скрипта есть режим "эмуляции" работы, чтобы оценить то, как он будет работать.
  7. Сначала обрабатываются самые большие таблицы (так как обычно их обслуживание важнее).
  8. Скрипт работает на SQL Server 2008 и более поздних (на 2005 тоже должен работать, но мне уже негде проверить)
  9. Результат вывода в режиме эмуляции сам является корректным TSQL скриптом.
  10. Ну и конечно, при регулярном выполнении этот скрипт на порядок легче, чем стандартные операции плана обслуживания.

С чем нужно быть осторожным при запуске скрипта:

  1. Нежелательно пересечение работы скрипта с интенсивной работой пользователей или с полным резервным копированием.
  2. Чтение из sys.dm_db_index_physical_stats в режиме DETAILED достаточно интенсивно читает с дисков.
  3. Скрипт предназначен для баз 1С или подобных. Не стоит экспериментировать с ним на совсем специфичных базах данных с нестандартными индексами.
  4. Если у вас есть таблицы 100-200 ГБ и больше, то при распараллеливании построения индекса, после перестроения он формально снова может оказаться фрагментированным.
  5. Статистики пересчитываются без полного сканирования. Это заметно быстрее. Если вам нужно полное сканирование каких-то таблиц, то пишите отдельный скрипт.

Рекомендации по запуску:

  1. Никаких регулярных "шринков" на рабочих базах быть не должно. Еще раз: шринкам не место в регулярном обслуживании!
  2. При полной модели восстановления я бы поставил полное резервное копирование после обслуживания индексов. Иначе при необходимости восстановления придётся донакатывать достаточно тяжёлый кусок журналов транзакций после восстановления основного образа. Простую модель восстановления на промышленно используемых БД я считаю либо редким исключением, либо частым недоразумением.
  3. Первый запуск лучше выполнить вручную в SSMS чтобы оценить время работы.

Остальное можно прочитать в коде и в комментариях.

PS: Движок сайта некорректно отобажает текст со знаками больше-меньше, поэтому скрипт приложен файлом, а в статье оставлено только начало скрипта.

 

-- Параметры скрипта
declare @database_names as nvarchar(max) = N''; -- имена баз задавать через запятую, если не заданы, то все несистемные базы
                                          -- пока парсер примитивный - строка просто делится по запятым и обрезаются крайние пробелы
                                          -- (если в имени базы будет запятая или в начале или конце имени пробел, то система не работает)
                                          -- если указано "-ИмяБазы", то база будет исключена, 
declare @index_size_threshhold as int = 1024;   -- минимальный размер в КБ для перестраиваемого индекса. Нет смысла перестраивать индексы на десяток страниц
declare @index_rebuild_threshhold as numeric(5,2) = 25; -- показатель фрагментации, начиная с которого происходит перестроение индекса
declare @index_defrag_threshhold as numeric(5,2) = 12;  -- показатель фрагментации, начиная с которого происходит дефрагментация индекса
declare @index_rebuild_space_used_threshhold as numeric(5,2) = 50; -- процент заполненности страниц меньше которого требуется перестроение индекса
declare @timeout as int = 7200; -- максимальное время работы скрипта
declare @max_size as bigint = 536870912; -- максимальный суммарный обрабатываемый размер в КБ (чтобы не нагенерировать логов на терабайты) -- 512*1024*1024 КБ = 0,5 ТБ
declare @is_emulate as bit = 1; -- 0 - выполнять, 1 - только вывести команды

Файлы

Наименование Файл Версия Размер Кол. Скачив.
Обслуживание индексов.sql
.sql 9,58Kb
06.02.14
230
.sql 9,58Kb 230 Скачать

См. также

Лучшие комментарии

11. anig99 08.02.2014 02:22
Я пользуюсь вот этим
http://ola.hallengren.com/downloads.html

Первым на скачивание как раз идет скрипт, который создает все нужные jobs
Ответили: (12) (23)
# Ответить
15. Andreynikus 12.02.2014 12:29
А зачем собственно пересчитывать статистику при ребилде индекса?
Ответили: (16)
# Ответить

Комментарии

1. xten 06.02.2014 10:58
А почему не должно быть шринков?
# Ответить
2. speshuric 06.02.2014 12:07
Шринки бывают разные, но все они не являются регулярными операциями. По видам:
  • shrink для журнала транзакций - не нужен, если корректно настроено резервное копирование и обслуживание индексов. Про роль резервного копирования я писал в статье про резервное копирование. А обслуживание индексов, если делать его как в этой статье не приводит к большому росту журналов (если делать штатными средствами, то журналы транзакций будут примерно чуть больше размера базы, но тоже достаточно определённого размера).
  • shrink для файла данных - не нужен, так как увеличивает фрагментацию индексов.
И обычно сразу после шринка файлу приходится снова расти - это лишние дисковые операции, причем такие операции, которые затормозят какую-то операцию изменения данных (а значит будут подвисания на транзакциях пользователей), да еще и фрагментация файлов на уровне ОС.

Единственное корректное применение шринка (и данных и ЖТ) - это после масштабных преобразований БД: разворачивание из dt, после свёртки, после реструктуризации основного регистра бухгалтерии. А такие операции происходят нечасто, планово и можно в план воткнуть еще пару пунктов (шринки с последующим обслуживанием индексов).
Ответили: (20) (29) (37)
# Ответить
3. Новиков 06.02.2014 12:42
В интернете можно найти много подобных скриптов (в простейшем виде они даже в документации есть), но мне ни один не подошёл, и поэтому я пользуюсь своим "велосипедом"


А почему?
Ответили: (4)
# Ответить
4. speshuric 06.02.2014 12:55
(3)
1. Почти нигде нет органичений по длительности и суммарному размеру обработки.
2. Почти нигде нет тестового режима.
3. Часто в скриптах есть странные вещи (то филлфактор не 100, то статистика не пересчитывается при ребилде индекса)
4. Часто в скрипте нет анализа размера таблиц (постоянно переиндексируются мелкие) и заполненности страниц.
5. Часто перестроение индекса отделено от пересчета статистик.

ps: Блин. Заметил, что движок сайта скрипт опять переколбасил (хотя я специально lg и gt ставил). Прикреплю сейчас файликом.
Ответили: (6)
+ 1 [ Droni; ]
# Ответить
5. rumik007 06.02.2014 14:51
скрипт скопировал, но он не до конца получился? не могу проверить в sql 2005

а в 2005 sql надо будет немного переделать декларацию переменных, т.е.

БЫЛО: declare @database_names as nvarchar(max) = N'Analyzerworkstm';

СТАЛО: declare @database_names as nvarchar(max);
set @database_names = N'Analyzerworkstm';
Ответили: (7)
# Ответить
6. Новиков 06.02.2014 14:54
(4) Ясно. По п.1., наверное соглашусь. Я так полагаю, это все имеет место быть когда объемы баз подходят к космическим масштабам? :) П.2 - п.5 я так полагаю, появились из-за п.1.?

Мне чем стандартный план обслуживания нравится: нарисовал все стрелками. Каждую операцию пометил на неудачу по уведомлениям. Если не произошло то- туда, если это - сюда. И забыл про все это дело как страшный сон :) Полагаю, у вас в скриптах тоже все это можно настроить.
Ответили: (7)
# Ответить
7. speshuric 06.02.2014 15:19
(5) Да, движок сайта сожрал половину. Если не получается скачать, то могу выложить/выслать.
(6) Время становится важным даже если суммарный объём баз на сервере 200-300 ГБ. А этот скрипт применялся и для баз 1-2 ТБ (точнее - почти этот, именно этот скрипт написан заново, потому что я там уже не работаю и не стал воровать). Но и дисковое пространство тоже внезапно расходуется при стандартном скрипте:
  • Файлы данных могут вырасти на размер самой большой таблицы
  • Файлы журналов при полной модели могут вырасти на 1-2 объёма файлов данных
  • Файлы журналов при простой модели могут вырасти на размер самого большого индекса в некоторых условиях (но построение индекса - обычно является операцией с минимальным протоколированием, поэтому обычно всё же ЖТ не сильно растёт)
  • Не забываем про бэкапы журналов и разностные бэкапы - они тоже станут большими после переиндексации

Неприятно прийти утром на работу и внезапно узнать, что из-за переиндексации базы упало всё из-за пересечения с загрузкой данных или съедено 200-500 ГБ на серверах.
Собственно, скрипт сейчас написал именно из-за того, что каждые выходные у наших админов журналы транзакций вырастали до двух размеров баз.

Про запуск из планов обслуживания я написал:
Такой скрипт можно запускать из задания (job) MS SQL Server Agent или из "кирпичика" Execute T-SQL Statement Task в планах обслуживания (кому как удобнее)
Ответили: (8)
# Ответить
8. rumik007 06.02.2014 15:37
(7) не вижу, где скачать. Мона в личку скинуть
Ответили: (9)
# Ответить
10. rumik007 06.02.2014 16:08
(9) ок, СПАСИБО!!!
# Ответить
11. anig99 08.02.2014 02:22
Я пользуюсь вот этим
http://ola.hallengren.com/downloads.html

Первым на скачивание как раз идет скрипт, который создает все нужные jobs
Ответили: (12) (23)
# Ответить
12. speshuric 08.02.2014 20:42
(11) Добротный комбайн. Чересчур униваерсален на мой вкус, но добротный.
# Ответить
13. dock 12.02.2014 08:42
Добрый человек... а есть ли у тебя статейка с описанием настроек сервера?
Судя по подходу, есть чем поделиться :)
Статья резервное копирование вообще порадовала своим содержанием!
Ответили: (14)
# Ответить
14. speshuric 12.02.2014 08:51
(13) Нет, такой статьи нет, но скорее потому что универсальных советов очень мало. А объяснение неуниверсальных советов выглядит как 1 строчка кода и 3 страницы объяснения, когда можно её выполнять, а когда не очень.
+ 1 [ Aule2; ]
# Ответить
15. Andreynikus 12.02.2014 12:29
А зачем собственно пересчитывать статистику при ребилде индекса?
Ответили: (16)
# Ответить
16. speshuric 12.02.2014 13:02
(15) При ребилде индекса, если не указать "STATISTICS_NORECOMPUTE" статистика по данному индексу пересчитывается сама, и причем "бесплатно": при ребилде всё равно весь индекс считывается. Но если таблица достаточно большая, а изменения в ней не приводят к фатальной фрагментации, то если мы не выполняем полного перестроения индекса (например, обходимся reorganize), то статистика может устареть.
Теоретически можно их вообще не пересчитывать, MS SQL сам их будет пересчитывать (если ему не запретить явно), но делать он это будет во время пользовательской транзакции, когда каждый тик-так на счету. Ну и для больших таблиц (100+ ГБ) с массовыми изменениями замечено, что лучше статистику пересчитывать в режиме full scan (иначе она бывает неактуальна), но это очень медленно.
Можно, конечно, пересчитать статистику отдельно от обслуживания индексов, но при обслуживании индексов как раз "протухает" много планов запросов, они потребуют перекомпиляции, поэтому достаточно разумно сразу после ребилдов/реорганайзов выполнить и sp_updatestats, чтобы "волн" рекомпиляций была одна, а не две.
sp_updatestats обновляет не все статистики, а только устаревшие, так что её вызов сразу после перестроения индексов не приводит к повторному просмотру только что перестроенных индексов, так что тут нет лишних затрат.
Ответили: (24)
# Ответить
17. dumsik 12.02.2014 16:39
speshuric, а можно вот это обосновать "Никаких регулярных "шринков" на рабочих базах быть не должно. Еще раз: шринкам не место в регулярном обслуживании!"
Ответили: (20)
# Ответить
18. EfiopReal 12.02.2014 16:49
Спасибо за статью.
Для себя решил сделать планами обслуживания на основе этой статьи (выполняются по ночам), серьезно увеличило скорость формирования отчетов в центральной базе.
Ответили: (20)
+ 1 [ dexxxqqq; ]
# Ответить
19. dumsik 12.02.2014 16:57
speshuric 12
# Ответить
20. speshuric 12.02.2014 17:08
(17) в (2) еще описал же вроде. Откуда им взяться в регулярном обслуживании?
(18) Фишка в том, что планы обслуживания, как описано в той статье выполняются в разы или десятки раз дольше, чем предлагаемый скрипт. И журналы транзакций на перестроении индексов будут расти до размера базы (если полная модель используется).
# Ответить
21. OrsoBear 26.02.2014 08:26
Сколько тут всего полезного.. админ не знал, подсунул для изучения.
Спасибо!
Ответили: (22)
# Ответить
22. speshuric 26.02.2014 09:14
(21) Пожалуйста, для подсовывания админам и написано :)
# Ответить
23. xzorkiix 14.03.2014 09:12
(11) anig99, поддержу http://ola.hallengren.com/downloads.html отлично себя оправдывает.
# Ответить
24. Andreynikus 27.03.2014 13:28
(16) speshuric,
Мне не понятно 2 момента:
1.
если мы не выполняем полного перестроения индекса (например, обходимся reorganize), то статистика может устареть.

Как статистика может устареть от дефрагментации? Ведь статистика это распределение данных в таблице. Грубо говоря если имеем таблицу на 1000 записей, то статистика это информация о том, что в этой таблице 100 записей со значением "Стул", 50 со значением "Стол" и 850 со значением "Кресло".
Если мы сделали дефрагментацию, то данные никуда не делись и их распределение никак не поменялось, количество столов и стульев не изменилось, следовательно статистика осталась актуальной. Может я что-то неправильно понимаю?

2.
при обслуживании индексов как раз "протухает" много планов запросов, они потребуют перекомпиляции

По какой именно причине обслуживание индексов вызывает перекомпиляцию плана запроса?
Ответили: (25)
# Ответить
25. speshuric 28.03.2014 15:50
(24) Andreynikus,
1. Статистика устаревает не от дефрагментации, а от того, что не обновляется. Просто перестроение индекса статистику обновляет, а дефрагментация не трогает. У автоматического обновления есть своя специфика: оно срабатывает, если я правильно помню на 20% обновления таблицы (что очень немало) и может произойти в "неудобный" для системы момент, затормозив работу текущего запроса.
2. Execution Plan Caching and Reuse. При обновлении статистики (т.е. при перестроении индекса, в частности) запросы потребуют перекомпиляции.
# Ответить
26. Region102 (файл скачал) 31.03.2014 07:19
У меня каждые 15 минут логи бэкапятся и шринкуются, это правильно?
Ответили: (27)
# Ответить
27. speshuric 10.04.2014 22:29
(26) (Был в отпуске) Бэкапятся - правильно. Шринкуются - неправильно.
Ответили: (28) (29)
# Ответить
28. baa50 11.04.2014 00:46
(27) speshuric, объясните почему Шринкуются - неправильно?
# Ответить
29. speshuric 11.04.2014 01:03
(27) В целом описано в комментарии (2). Если не согласны, могу подробнее и с цифрами.
Ответили: (31)
# Ответить
30. pavlo 27.05.2014 07:52
(9) speshuric, Ссылка дохлая на гуглдокс или у меня не пашет? можно куда нить выложить?
# Ответить
31. VVi3ard (файл скачал) 07.07.2014 17:01
(29)
Спасибо за то что поделились опытом, в отличии от технических статей статьи с опытом получаются наиболее концентрированными.
Есть пара вопросов:

Если у вас есть таблицы 100-200 ГБ и больше, то при распараллеливании построения индекса, после перестроения он формально снова может оказаться фрагментированным.


Как вы боретесь с этим? Насколько сильная фрагментация получается?

Судя по
При полной модели восстановления я бы поставил полное резервное копирование после обслуживания индексов.

У вас подобный скрипт выполняется раз в неделю?
Ответили: (33)
# Ответить
32. Painted 08.07.2014 08:15
Перестроение — полное построение индекса. При этом обычно станицы становятся максимально плотно забиты данными, а статистика обязательно обновляется (всё равно все данные читать). Обычно данные индексированные данные полностью недоступны при перестроении индекса.
Rebuild index у меня проходит за час, сбор статистики за два. Возникают два вопроса, почему перестройка индекса идет быстрее сбора статистики и можно ли вообще отказаться от сбора статистики и делать по ночам только ребилд индекс?
Ответили: (33)
# Ответить
33. speshuric 11.07.2014 00:08
(31)
Как вы боретесь с этим? Насколько сильная фрагментация получается?

Не сильная, не боремся
У вас подобный скрипт выполняется раз в неделю?

Нет, хоть каждый день. Тут скорее "я бы не ставил полное и разностное резервное копирование прямо перед индексированием, а поставил бы сразу после, чтобы при сбое иметь копию сразу после обслуживания, а не трахаться с последующим восстановлением больших журналов транзакций"
(32)
Возможно, дисковая посистема такая, возможно статистик много нагенерировано. Тут надо предметно смотреть.
Ответили: (38)
# Ответить
34. Tavalik 23.07.2014 10:19
Спасибо за статью, и за подробные комментарии к вопросам.

Для меня остался невыясненным один вопрос:
Надо ли делать обновление статистики после перестроения индекса? Ведь обновление и так происходит автоматически при ребилде. И если все же надо, то почему?
# Ответить
35. NNomad 17.09.2014 11:36
Еще один вопрос.
Нужно ли производить очистку процедурного КЭШа с помощью DBCC FREEPROCCACHE после обновления статистики?
И после выполнения этого скрипта в частности?
# Ответить
36. LexSeIch 22.01.2015 07:31
Мир этому дому!
С большим удовольствием прочитал статью и обсуждения - информация полезная особенно для тех, для кого MS SQL - черный ящик. Автору спасибо.
На курсах по оптимизации внимание на индексы и статистику обращали в первую очередь.
# Ответить
37. AlexO 26.01.2015 10:39
(2) speshuric,
shrink для журнала транзакций - не нужен
Особенно "не нужен", когда появляется ошибка "Log is full", и её надо срочно исправить.
# Ответить
38. Eduard66 03.02.2015 10:05
(33) speshuric, А что нужно дорабатывать при больших базах?
Какие особенности при администрировании?
Ответили: (39)
# Ответить
39. AlexO 03.02.2015 10:29
(38) Eduard66,
А что нужно дорабатывать при больших базах?
То же, что и "при маленьких".
Тут нужно умение оценить текущее состояние базы в SQL, оценить степень проблемы, и применить нужное средство в нужное время.
Например, в данной статье рассматривается проблема большой/дефрагментированной таблицы индексов, и смежная проблема статистики. А статистика может быть неактуальна и в маленькой базе.
Другое дело, что чем меньше данных обрабатывается - тем меньше влияние неактуальной статистики, и поэтому её обновлением пренебрегают в таком случае.
Ответили: (40)
# Ответить
40. Eduard66 03.02.2015 10:48
(39) AlexO, я имел в виду что автор указывает на доработку скрипта при работе с большими базами.
Он подходит без изменений для большинства баз данных 1С до примерно 0,5-0,7 ТБ (дальше его уже лучше немного доработать, если кому-то интересно/актуально могу пояснить в комментариях).

Вопрос собственно про это
Ответили: (41)
# Ответить
41. AlexO 03.02.2015 10:50
(40) Eduard66, Скорей всего, речь идет о более мелких выборках при террабайтных базах.
Т.е. нужно разбить блок обрабатываемых данных на пакеты поменьше.
# Ответить
42. torg1c 19.03.2015 19:50
Почему если сделать переиндексацию то какие то индексы все равно показываются фрагментированными в sys.dm_db_index_physical_stats?
Ответили: (43) (44)
# Ответить
43. Painted 20.03.2015 08:09
(42) torg1c, Процент фрагментации какой при этом? fragment_count? Если меньше 10, то забей. Так и должно быть. )))
# Ответить
44. AlexO 20.03.2015 09:24
(42) torg1c, потому что база постоянно меняется.
Ответили: (45)
# Ответить
45. torg1c 23.03.2015 17:35
(44) AlexO,

Нет! Останавливаюю серевер 1с, делаю переиндексацию, смотрю индексы и вижу что часть так и непереиндексировалась.
Процент и 80 и 90 есть )
Ответили: (46)
# Ответить
46. Painted 23.03.2015 22:13
(45) torg1c,
Процент и 80 и 90 есть
Еще page_count надо смотреть. Если меньше 10 или проценты меньше 10, то это нормально. Дефрагментатор, он не мелочится. Для 100% дефрагментации нужно делать rebuild index.
Ответили: (47) (48)
# Ответить
47. AlexO 23.03.2015 22:26
(46) Painted, дефрагментация индекса вообще уже не рекомендуется - бессмысленная операция для баз 1С.
# Ответить
48. Painted 27.03.2015 08:26
(46) Painted,
Еще page_count надо смотреть. Если меньше 10
Все еще круче, оказывается. Если page_count < 100, считается слабо фрагментированный индекс.
# Ответить
49. wbazil 14.05.2015 13:29
скажите пожалуйста, можно ли использовать Ваш скрипт для 7.7?
на 8.2 все отработало отлично
Ответили: (50)
# Ответить
50. speshuric 20.05.2015 19:48
(49) от версии 1с не зависит.
# Ответить
51. Kondusov_Dmitij 02.09.2015 12:24
Подскажите, пожалуйста, есть ЗУП КОРП 2,5 база стала сииильно пухнуть, каждый день выполняется переиндексация, обновление статистики. Нашел таблицу в ней всего 2 индекса, но они занимают 45Гб, это как-то не нормально. Что делать то?
Ответили: (52)
# Ответить
52. speshuric 03.09.2015 00:48
(51) Kondusov_Dmitij,
Мало данных.
2 индекса, но они занимают 45Гб
-это как именно посчитали? И что это за таблица? Может это регистр накопления и итоги не закрываются?
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016