Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обслуживание индексов / 24 сообщений из 24, страница 1 из 1
06.12.2019, 13:57
    #39899080
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Имеется бизнес система, к данным обращается посредством СУБД ms sql. Последнее время начали поступать жалобы от пользователей на медленную работу системы. Были теоретически изучены возможные причины сбоев, производительность сервера в порядке, место есть. Блокировок (во всяком случае таких, чтобы приводили к серьёзным тормозам в системе), нет. Возникли подозрения (подкрепленные словами вендора) о том, что проблема может быть в индексах и статистике. Не являюсь администратором, поэтому представления о индексах по большей части теоретические. Поэтому хотел бы посоветоваться с более опытными коллегами:
1. Каким образом лучше всего комплексно проверить индексы и статистику?
2. Если проблема в индексах, есть ли универсальный скрипт для реорганизации (или перестройки?) индексов?
3. Могут ли возникнуть проблемы во время процесса и нужно ли переводить БД в оффлайн режим?
4. С какого количества строк индексы вообще становятся эффективны (во многих статьях указывается, что на небольших таблицах они могут даже замедлить выборки, небольшие это сотни, тысячи, десятки тысяч строк?)
Спасибо!
...
Рейтинг: 0 / 0
06.12.2019, 14:21
    #39899101
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
покажите статистику ожиданий
SQL Server Wait Statistics
...
Рейтинг: 0 / 0
06.12.2019, 14:44
    #39899116
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Saniacot

1. Каким образом лучше всего комплексно проверить индексы и статистику?

основные проблемы у перечисленного : устаревание (статистики), нехватка (статистики, индексы), избыток (индексы), фрагментация (индексы)
вся информация доступна в системных представлениях
- sys.dm_db_index_physical_stats
- sys.dm_db_index_usage_stats
- sys.dm_db_index_operational_stats
- sys.dm_db_missing_index_details
- sys.dm_db_stats_properties


Saniacot

2. Если проблема в индексах, есть ли универсальный скрипт для реорганизации (или перестройки?) индексов?

можно использовать де-факто стандарт на подобные скрипты: Ola Hallengren SQL Server Index and Statistics Maintenance
ссылка: https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html

Saniacot

3. Могут ли возникнуть проблемы во время процесса и нужно ли переводить БД в оффлайн режим?

база в режиме offline недоступна ни для кого/чего
реиндекс лучше проводить в периоды минимальной нагрузки, не пересекаясь с другими процессами типа бекапа
обновление статистики не грузит особо систему и, обычно, проходит быстро, если запущено с настройками по умолчанию

Saniacot

4. С какого количества строк индексы вообще становятся эффективны (во многих статьях указывается, что на небольших таблицах они могут даже замедлить выборки, небольшие это сотни, тысячи, десятки тысяч строк?)

Видел такое (Dave Pinal демонстрировал), когда без индекса оптимизатор строил быстрый план, а с вроде бы нужным индексом, план выходил по факту очень медленным.
Нет железного правила с какого кол-ва записей стоит строить индексы.
Как и во многих других вопросах ответ начинается с фразы "это зависит от многих вещей" - размера таблицы и вида данных в ней, кол-ва ресурсов на сервере, характера работы с таблицей и т.п.
Оптимизатор сам принимает решение использовать индекс или просто просканировать таблицу исходя из самого запроса, его стоимости запроса и многих других параметров.
...
Рейтинг: 0 / 0
06.12.2019, 14:44
    #39899117
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Если речь идёт о запросе в статье, то вот:
...
Рейтинг: 0 / 0
06.12.2019, 15:11
    #39899141
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
вообще да, начитывает много, может и индексов нехват.
а может и просто памяти нет, у вас сколько RAM?
и какова полная версия сервера?
( select @@version )
...
Рейтинг: 0 / 0
06.12.2019, 15:14
    #39899142
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
komrad
Saniacot

1. Каким образом лучше всего комплексно проверить индексы и статистику?

основные проблемы у перечисленного : устаревание (статистики), нехватка (статистики, индексы), избыток (индексы), фрагментация (индексы)
вся информация доступна в системных представлениях
- sys.dm_db_index_physical_stats
- sys.dm_db_index_usage_stats
- sys.dm_db_index_operational_stats
- sys.dm_db_missing_index_details
- sys.dm_db_stats_properties


Saniacot

2. Если проблема в индексах, есть ли универсальный скрипт для реорганизации (или перестройки?) индексов?

можно использовать де-факто стандарт на подобные скрипты: Ola Hallengren SQL Server Index and Statistics Maintenance
ссылка: https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html

Saniacot

3. Могут ли возникнуть проблемы во время процесса и нужно ли переводить БД в оффлайн режим?

база в режиме offline недоступна ни для кого/чего
реиндекс лучше проводить в периоды минимальной нагрузки, не пересекаясь с другими процессами типа бекапа
обновление статистики не грузит особо систему и, обычно, проходит быстро, если запущено с настройками по умолчанию

Saniacot

4. С какого количества строк индексы вообще становятся эффективны (во многих статьях указывается, что на небольших таблицах они могут даже замедлить выборки, небольшие это сотни, тысячи, десятки тысяч строк?)

Видел такое (Dave Pinal демонстрировал), когда без индекса оптимизатор строил быстрый план, а с вроде бы нужным индексом, план выходил по факту очень медленным.
Нет железного правила с какого кол-ва записей стоит строить индексы.
Как и во многих других вопросах ответ начинается с фразы "это зависит от многих вещей" - размера таблицы и вида данных в ней, кол-ва ресурсов на сервере, характера работы с таблицей и т.п.
Оптимизатор сам принимает решение использовать индекс или просто просканировать таблицу исходя из самого запроса, его стоимости запроса и многих других параметров.

Спасибо за советы! Попробовал вызывать первое системное представление по одной из основных таблиц. Как я понимаю по значению поля avg_fragmentation_in_percent всё плохо?
...
Рейтинг: 0 / 0
06.12.2019, 15:21
    #39899154
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Saniacot

Спасибо за советы! Попробовал вызывать первое системное представление по одной из основных таблиц. Как я понимаю по значению поля avg_fragmentation_in_percent всё плохо?

ориентируйтесь на столбец page_count
одна страница - 8кб
так что, грубо, можно игнорировать всё меньше 10000
...
Рейтинг: 0 / 0
06.12.2019, 15:23
    #39899155
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Saniacot
Попробовал вызывать первое системное представление по одной из основных таблиц. Как я понимаю по значению поля avg_fragmentation_in_percent всё плохо?

все плохо только с кластерным.
остальные индексы слишком малы, чтобы как-то влияло.
про память и редакцию сервера ответьте,
а то если это Express с гигим памяти,
то действительно все плохо
...
Рейтинг: 0 / 0
06.12.2019, 15:24
    #39899156
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
komrad
Saniacot

Спасибо за советы! Попробовал вызывать первое системное представление по одной из основных таблиц. Как я понимаю по значению поля avg_fragmentation_in_percent всё плохо?

ориентируйтесь на столбец page_count
одна страница - 8кб
так что, грубо, можно игнорировать всё меньше 10000


Просто в документации к view указано следующее:
"Для обеспечения наибольшей производительности значение аргумента avg_fragmentation_in_percent должно быть как можно более близким к нулю. Но могут быть приемлемыми значения от 0 до 10 процентов. Для снижения этих значений могут использоваться любые методы снижения фрагментации, такие как перестройка, реорганизация или повторное создание. Дополнительные сведения о том, как анализировать степень фрагментации в индексе, см. в разделе реорганизация и перестроение индексов."

А у меня там все значения близки к 100% :)
...
Рейтинг: 0 / 0
06.12.2019, 15:33
    #39899163
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Yasha123
Saniacot
Попробовал вызывать первое системное представление по одной из основных таблиц. Как я понимаю по значению поля avg_fragmentation_in_percent всё плохо?

все плохо только с кластерным.
остальные индексы слишком малы, чтобы как-то влияло.
про память и редакцию сервера ответьте,
а то если это Express с гигим памяти,
то действительно все плохо

C памятью всё вроде бы нормально, версия не экспресс:
...
Рейтинг: 0 / 0
06.12.2019, 15:40
    #39899169
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Saniacot,

если беспокоит только одна эта таблица, то она мала - всего 33МБ
перестройте кластерный индекс и проверьте фрагментацию
скорее всего изменений по производительности не увидите, хотя может новые планы и будут быстрее - индексная статистика-то обновится
...
Рейтинг: 0 / 0
06.12.2019, 15:42
    #39899171
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Saniacot,

4к страниц не существенно, это всего 32 мегабайта данных. Тормозит из-за неоптимальных планов запроса. Такие планы могут строиться из-за особенностей используемых запросов или устаревания статистик.
...
Рейтинг: 0 / 0
06.12.2019, 16:09
    #39899187
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Владислав Колосов
Saniacot,

4к страниц не существенно, это всего 32 мегабайта данных. Тормозит из-за неоптимальных планов запроса. Такие планы могут строиться из-за особенностей используемых запросов или устаревания статистик.

Есть другие инстансы данного приложения (с другой БД, но аналогичной структурой, которая не тормозит). Значит скорее всего дело в статистике. Не подскажите, как правильно увидеть, что с ней что-то не так?
...
Рейтинг: 0 / 0
06.12.2019, 16:26
    #39899196
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
и толку от обрезанной версии сервера?
там же не видно редакцию.
и память у вас в каких единицах, простите?
committed это в байтах что ли?
...
Рейтинг: 0 / 0
06.12.2019, 16:50
    #39899210
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Yasha123
и толку от обрезанной версии сервера?
там же не видно редакцию.
и память у вас в каких единицах, простите?
committed это в байтах что ли?

Сервер вообще не загружен, версия сервера Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) (Hypervisor)
...
Рейтинг: 0 / 0
06.12.2019, 16:57
    #39899214
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
у вас 18% PAGEIOLATCH_SH, он же постоянно читает с диска.
при мизерных таблицах и Standard Edition(ограничение на RAM 64Гб, не 1 как в Экспрессе) как это можно объяснить?
...
Рейтинг: 0 / 0
06.12.2019, 16:58
    #39899215
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
а размер базы какой?
...
Рейтинг: 0 / 0
06.12.2019, 17:00
    #39899216
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
а вообще о чем разговор, у вас сервер перегружен совсем недавно...
...
Рейтинг: 0 / 0
06.12.2019, 17:07
    #39899220
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Yasha123
а вообще о чем разговор, у вас сервер перегружен совсем недавно...

либо
Код: sql
1.
dbcc sqlperf('sys.dm_os_wait_stats', clear)



недавно видал самописное приложение, которое собирало ожидания на сиквеле ну и обнуляло, чтобы в следующий заход не "заморачиваться" расчетами
анализ дефолтной трассы выдал эту прелесть
...
Рейтинг: 0 / 0
06.12.2019, 17:09
    #39899221
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Yasha123
а вообще о чем разговор, у вас сервер перегружен совсем недавно...

Извиняюсь, я не администратор, что это значит в контексте данного вопроса?
11008,44 МБ размер БД
1374,37 МБ свободно
...
Рейтинг: 0 / 0
06.12.2019, 17:22
    #39899224
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Saniacot
Yasha123
а вообще о чем разговор, у вас сервер перегружен совсем недавно...

Извиняюсь, я не администратор, что это значит в контексте данного вопроса?
11008,44 МБ размер БД
1374,37 МБ свободно

сервер собирает статистику по ожиданиям с момента своего рестарта.
ну или с момента, когда насильно эту статистику почистили,
вон пример кода-шедевра у komrad -а.
у вас ожидания слишком малы, чтобы их анализировать.
значит, или сервер недавно перегрузили, или "почистили" статистику.
---
база у вас 11Гб,
а таблицу вы анализируете совсем не ту, мизерную.
смотрите на те таблицы, где ваши гигабайты сидят
---
вот время рестарта(если в 2008-ом вообще было...)
Код: sql
1.
2.
select sqlserver_start_time
from sys.dm_os_sys_info;
...
Рейтинг: 0 / 0
06.12.2019, 17:26
    #39899226
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Yasha123
Saniacot
пропущено...

Извиняюсь, я не администратор, что это значит в контексте данного вопроса?
11008,44 МБ размер БД
1374,37 МБ свободно

сервер собирает статистику по ожиданиям с момента своего рестарта.
ну или с момента, когда насильно эту статистику почистили,
вон пример кода-шедевра у komrad -а.
у вас ожидания слишком малы, чтобы их анализировать.
значит, или сервер недавно перегрузили, или "почистили" статистику.
---
база у вас 11Гб,
а таблицу вы анализируете совсем не ту, мизерную.
смотрите на те таблицы, где ваши гигабайты сидят
---
вот время рестарта(если в 2008-ом вообще было...)
Код: sql
1.
2.
select sqlserver_start_time
from sys.dm_os_sys_info;


Спасибо за информацию, буду дальше разбираться:)
...
Рейтинг: 0 / 0
12.12.2019, 04:42
    #39901594
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
komrad

недавно видал самописное приложение, которое собирало ожидания на сиквеле ну и обнуляло, чтобы в следующий заход не "заморачиваться" расчетами
анализ дефолтной трассы выдал эту прелесть
Это самописное приложение называется SharePoint. Они зачем то сбрасывают waitstats каждый час.
...
Рейтинг: 0 / 0
12.12.2019, 11:57
    #39901768
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обслуживание индексов
Mind
Это самописное приложение называется SharePoint. Они зачем то сбрасывают waitstats каждый час.


это прекрасно )
полагаю, что "это наша система - что хотим, то и творим! и не подсматривайте за нами!"
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обслуживание индексов / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]