powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дефрагметация базы данных
40 сообщений из 40, показаны все 2 страниц
Дефрагметация базы данных
    #39836880
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос: можно ли посчитать процент фрагментации всей базы данных. Или нет такой функции?


Конечно кто то может сказать , что повесь в планировщик реиндексацию и забей - в ответ скажу что хочу контролировать. Кто то скажет что можно посмотреть "sys.dm_db_index_physical_stats" , но там слишком детально , а когда у тебя десятки серверов и баз данных, то нужен 1 показатель по каждой базе данных.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836884
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44,

вам к людям считающим среднюю температуру по больнице. Как таким людям дают десятки серверов?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836888
god44но там слишком детально
Скажу еще больше потяние фрагментация штука относительная. sys.dm_db_index_physical_stats не берет во внимание ин-мемори, колумнсторы и много еще чего по мелочи.

TaPaK вам к людям считающим среднюю температуру по больнице
Плюсую.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836894
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
если вы такой умный, а не просто "троль" или может "бот" сервера... какой показатель фрагментации вам будет интересен и прозрачен? Хотя вы видимо один из тех кто крутит динамо и доказывает руководству о его полезности)))

Нет ответа - пишем всякую хрень.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836896
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44,

Модератор: Если вам интереснее обсуждать участников, а не ваш вопрос, я могу закрыть тему.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836897
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44,

Показатель должен быть такой: "в этой базе есть как минимум одна таблица, которой необходимо делать maintenance".
А не среднее по больнице, как вам уже намекнули.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836900
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

У таблицы есть вес. И если таблица дефрагметирована на 50% , а весит 16 КБ то и фиг с ней.
Отобрать все весомые таблицы и их смотреть? Нужен индикатор который говорит о том что пора посмотреть на базу данных.

По поводу намеков: средняя температура по больнице это нормальный показатель котроый можно вычислить исходя из санпина и применив распеределение по стьюденту)))
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836903
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

Прочитал один из ваших коментов - уточните почему вы считаете дефрагметацию не целессобразной?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836914
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44Кто то скажет что можно посмотреть "sys.dm_db_index_physical_stats" , но там слишком детально
Хм, запрос к sys.dm_db_index_physical_stats - это обычный запрос.

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

Вообщем не вижу проблем, чтобы посчитать то, что вам надо.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836918
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухХм, запрос к sys.dm_db_index_physical_stats - это обычный запрос.

...слегка поднимающий данные с диска в память.
вам не доводилось работать на сервере с 24Гб памяти
и базой в пару терабайт?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836922
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44Нужен индикатор который говорит о том что пора посмотреть на базу данных.
Ну так надо данный показатель индикатор определить, посчитать и вывести.
Если есть попугаи для каждой таблицы и её размеры. то несложно сделать либо фильтр по размерам/весу либо другой расчет.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836924
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44Вопрос: можно ли посчитать процент фрагментации всей базы данных. Или нет такой функции?

Это выдумки, у базы нет процента фрагментации. Фрагментация есть у файла базы данных. Фрагментация есть у таблицы и индекса.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836926
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,

Это все понятно и структуру параметров и ответа я знаю.

Я считаю ,что зная назмер бд и весомость каждого индекса я могу посчить процент фрагментации всей БД.
Но может есть проще?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836928
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Индекс это объект базы данных и он фрагментрован, значит база фрагментирована.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836930
god44, фрагментация бывает логическая и физическая (в силу принципов работы разных типов дисков с ней можно бороться, но чаще всего это бессмысленно пример SSD + на виртуалке скажем от этого толку не будет). Если говорить за логическую, то вы добьетесь лишь уменьшения кол-ва страниц под хранения вашего индекса что положительно скажется на размере. И толку? Важнее актуальная статистика + если мы говорим за колумнсторы то чтобы не было открытых секций.

Если уж сильно хочется среднее по больнице то можно так сделать:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DROP TABLE IF EXISTS #temp

SELECT database_id
     , avg_fragmentation_in_percent
     , page_count
     , dbsize = SUM(page_count) OVER (PARTITION BY database_id)
INTO #temp
FROM sys.dm_db_index_physical_stats(NULL, NULL, NULL, NULL, NULL)
WHERE alloc_unit_type_desc = 'IN_ROW_DATA'
    AND index_level = 0
    AND page_count > 0

SELECT db = DB_NAME(t.database_id)
     , perc = AVG(t.avg_fragmentation_in_percent)
     , data_size = MAX(t.dbsize) * 8. / 1024
FROM (
    SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY database_id ORDER BY page_count * 100. / dbsize DESC)
    FROM #temp
) t
WHERE t.rn < 20
GROUP BY t.database_id


Но серверу от такого будет очень плохо. Формально можно сделать быстрее, но суть не поменятся при каждом вызове будут физические чтения ибо инфу с этой системной функции сиксел не кеширует на постоянной основе.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836940
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

При запросе раз в сутки на производительности не скажется.
Здесь получился действительно средний по больнице коли такая формулировка принята))

Я сделал тоже самое но с учетом весомости индекса относительно веса базы данных.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836942
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44При запросе раз в сутки на производительности не скажется.

вот же блин,
нет, вы реально не запускали эту жопу на базе в 2Тб,
ну или у вас памяти вагон
----
перевести бы некоторых на 24Гб,
чтобы ценили то, что имеют
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836943
god44При запросе раз в сутки на производительности не скажется.
Я тут в соседнем топике про свою тулу чуть пиарю, но чтобы вы понимали я убил более полугода, чтобы найти хоть какой-то разумный компромисс при работе с sys.dm_db_index_physical_stats. Повторюсь данные оттуда не кешируются на постоянно основе. Все данные в таблицах что у вас есть буду высканиваться. PLE будет в районе нуля. Потом начнется новый день и что будет... тормоза :)

Если памяти хватает и диски быстрые - то велкомс.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836944
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

Я могу себе позволить сделать это ночью.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836945
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

Ссылку дадите?
Мне жватет памяти и запускаю ночью
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836949
god44, ссылку на что?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836951
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Syrovatchenko,

На свой профиль, где есть список тем автора, в котором одна тема.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836954
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

Я тут в соседнем топике про свою тулу чуть пиарю, но чтобы вы понимали я убил более полугода, чтобы найти хоть какой-то разумный компромисс при работе с sys.dm_db_index_physical_stats....
на соседний топик и компромис))
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836955
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Syrovatchenkogod44, ссылку на что?
На ваш топик. Вы написали выше: "Я тут в соседнем топике про свою тулу чуть пиарю".
Так вот человек не понял то, что соседний топик - это тема, созданная вами, и её трудно не найти в вашем профиле :)
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836956
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Спасибо
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836957
god44компромис
Сканировать не все обьекты а только те которые входят в диапазон по расчитанному заранее размеру индексов.
Если хочется деталей то тут можно почитать (анонс правда на вторник только).
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836958
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,

Спасибо Дмитрий за поддержку.
Реально в профиле есть еще ссылки на хабр и там 32 темы а на соседний то топик и не обратил внимание))
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836959
god44Реально в профиле есть еще ссылки на хабр и там 32 темы а на соседний то топик и не обратил внимание))
Та вроде только одна запись. Если в поиске смотреть.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836963
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

Есть тесты по фрагметированным и не фрагметированным талицам? Можете показать ?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836965
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44Владислав Колосов,

Индекс это объект базы данных и он фрагментрован, значит база фрагментирована.

Если колесо у машины лопнуло, значит и машина лопнула :) Верно мыслите! Таблица может занимать непрерывное пространство базы данных, но быть фрагментированной внутри этого пространства. При этом база не фрагментирована, а таблица - да.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39836967
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Syrovatchenkoфрагментация бывает логическая и физическая (в силу принципов работы разных типов дисков с ней можно бороться, но чаще всего это бессмысленно пример SSD + на виртуалке скажем от этого толку не будет). Если говорить за логическую, то вы добьетесь лишь уменьшения кол-ва страниц под хранения вашего индекса что положительно скажется на размере

С точностью до наоборот

1. Физическая фрагментация (она же заполненность страниц) влияет на размер индекса и она то как раз почти всегда влияет на скорость получения данных, т.к. меньше данных можно уместить в том же объеме памяти и как следствие происходит больше чтений с диска.
Плюс, если говорить про SSD, нормальные SDD полки стоят не то чтобы совсем дешево. И использовать их, скажем, на 50 % только из-за фрагментации - так себе практика.

2. А вот логическая фрагментация ("физический" порядок расположения страниц индекса в файле), действительно, слабо влияет на те же SSD диски, где данные и так уже "перемешаны".

"физический" в кавычках - т.к. это не более чем последовательность страниц файле данных, который сам по себе может быть фрагментирован, я уже не говоря про рейды, когда соседние страницы в файле могут лежать вообще на разных физических носителях.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837020
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44Sergey Syrovatchenko,

Я тут в соседнем топике про свою тулу чуть пиарю, но чтобы вы понимали я убил более полугода, чтобы найти хоть какой-то разумный компромисс при работе с sys.dm_db_index_physical_stats....
на соседний топик и компромис))Да те же яйца только в профиль. Что вашей тулзой что напрямую запросом разница какая? Все равно придется те же данные физически читать с диска в память. Что будет особо критично на огромных базах. На маленьких конечно можно поиграть.

god44,
Считать фрагментацию каждый день только ради того чтобы в отчете показать красненьким базы - полная глупость. Если уж посчитали и подняли с диска в память ну так сразу и дефрагментируйте если нужно. И желательно объект за объектом. А не так что 3 часа считали фрагментацию по все базам, переписали память 10 раз, а потом опять те же данные пошли читать, ну а тут и maintenance window подошел к концу, и не успели закончить. А на следующий день все сначала начинать.
Ваше желание контролировать на таком уровне не имеет никакого смысла. Поставьте проверенное решение по ребилду индексов в джоб, а потом смотрите логи если уж так хочется.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837024
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mind,

А есть понимание что sys.dm_db_index_physical_stats поднимает? На больших базах она сущий ад, но как-то не интересовался
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837053
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKMind,

А есть понимание что sys.dm_db_index_physical_stats поднимает? На больших базах она сущий ад, но как-то не интересовался
Зависит от подробности вывода данных. Например, при "detailed", когда выдаётся заполненность страниц, происходит скан.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837122
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

А при Limited?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837151
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44msLex,

А при Limited?А при limited не происходит.
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837348
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,
Получается , что при limited нет сканирования дисков и степень фрагментации я получаю ту которую собрал скуль ранее?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39837354
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
god44Получается , что при limited нет сканирования дисков и степень фрагментации я получаю ту которую собрал скуль ранее?
нет, нифига не получается.
не сканируется листовой уровень.
получаете ущербный результат.
BOLThe LIMITED mode is the fastest mode and scans the smallest number of pages.
For an index, only the parent-level pages of the B-tree (that is, the pages above the leaf level) are scanned.
почему бы самому хэлп не почитать?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39838070
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
god44Sergey Syrovatchenko,

Еще раз прошу. Так как вы рекомедуете людям на хабре не дефрагментировать.
Есть тесты по фрагметированным и не фрагметированным талицам? Можете показать ?


Ниже привожу тест
Объем данных: 1 таблицы, Data 1 GiB, Index 39 MB
Диск обычный, SSD в 0 рейде и серверные диски в 10 рейде
Тест проводился описанным вами инструментом "SqlQueryStress"
Так как нагрузки на базу нет - инструмент дает возможность запустить параллельные запросы. Использовалось 200 запросов.

Запрос:
Код: sql
1.
2.
3.
SELECT COUNT(*)
  FROM [dbo].[_InfoRg7421]
  where [_Fld7423]='4017-01-30 11:10:25.000'



Результат запроса = 33





И вопрос еще раз. Почему вы рекомендуете не дефрагментировать?
...
Рейтинг: 0 / 0
Дефрагметация базы данных
    #39838071
god44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
god44,

Не приложился график
https://yadi.sk/i/Gk5AY2IDGbJk7A
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дефрагметация базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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