Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Не занимались расчисткой БД совсем, несколько лет хранили всё, и сейчас ситуация следующая: database_size: 65530 MB unallocated_space: 7168 MB reserved: 59536944 KB data: 21540368 KB index_size: 37946336 KB unused: 50240 KB в основных таблицах по 20-30 млн строк. Есть утилита для расчистки(от поставщика ПО, с которым мы работаем), но она крайне примитивная, ей задаётся дата и всё что ДО этой даты - уничтожается. Но нам такой вариант не подходит. Есть определённые данные, которые мы хотим хранить. Написали свой скрипт, который отбирает нужные и не нужные данные и через хранимую процедуру удаляет только те записи, которые не нужны. Опыты показывают, что 50-80% данных будут уничтожаться. Поставили скрипт исполняться в нерабочее время и по ночам он начал потихонечку расчищать БД: сначала выбирает необходимые id и потом удаляет их из множества таблиц. Вот лог последнего выполнения по основной таблице, значение ДО/ПОСЛЕ выполнения: rows: 22931608/22877252 (удалил 54356 записей) reserved: 11118952/11119144 (увеличилось на 192) data: 2453136/2453192 (увеличилось на 56) index_size: 8659424/8658760 (уменьшилось на 664) unused: 6392/7192 (увеличилось на 800) уточню, что это результаты только по основной таблице, помимо неё удаление происходит ещё в ~5 связанных таблицах. Под утро выполняется план обслуживания БД: 1) бекап 2) индексирование 3) шринк Забыл сказать причину расчистки: приложение которое работает с базой начало жутко виснуть, выдавать ошибки, профайлером посмотрели запросы, нашли запросы, которые БД исполняет очень долго, а программа ждёт ответ в течение 30 секунд и потом выдаёт ошибку(timeout). Вот прямо сейчас вижу запрос, который исполняется 44 секунды, а программа через 30 секунд ожидания выдала ошибку и всё. Вопросы: 1) Надо ли ещё что-нибудь делать в нашем случае? 2) Не совсем понял момент по значению data - оно не уменьшилось после удаления записей, а наоборот выросло, так и должно быть? 3) Вечером перезагружаем сервер, после полного запуска SQL съедает 15-25% ОЗУ, утром приходим(ночью отработал скрипт расчистки, потом бекап, потом индексация, потом шринк) и съедено 70-90% ОЗУ, в течение дня доходит до ~97%. Так и должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 11:36 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, re>database_size: 65530 MB Это "пятничный" юмор такой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 11:52 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
ну может это sql2000 на офисной машинке с дохлым цпу и маленькими дисками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 11:55 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Меня скоро передергивать от слова шринк будет, в особености после перестроения индексов. Шринкуй, перезагружай, доминируй! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 11:57 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Вопросы: 1) Надо ли ещё что-нибудь делать в нашем случае? 2) Не совсем понял момент по значению data - оно не уменьшилось после удаления записей, а наоборот выросло, так и должно быть? 3) Вечером перезагружаем сервер, после полного запуска SQL съедает 15-25% ОЗУ, утром приходим(ночью отработал скрипт расчистки, потом бекап, потом индексация, потом шринк) и съедено 70-90% ОЗУ, в течение дня доходит до ~97%. Так и должно быть?1.а Шринк срочно уберите, он раз за разом замедляет работу базы. 1.б Пытайтесь оптимизировать работу приложения, например, модифицируйте его, если возможно, или попытайтесь построить недостающие индексы. 2. Вообще должно уменьшаться, раз удаляете. 3. Нормально. Если на сервере запущены ещё какие то приложения, кроме MSSQL, то можете ограничить ему память. Он забирает столько памяти, сколько дадут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 14:05 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, если у вас переиндексация - регулярная операция, запаситесь дисковым пространством. Ничего шринкать не надо. Оно для другого предназначено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 14:24 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, 65 гигов, это "ни о чем" по современным меркам. поэтому надо доделать главную работу: "рофайлером посмотрели запросы, нашли запросы, которые БД исполняет очень долго, " а теперь проанализировать эти запросы и понять что на самом деле причина их тормозов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 15:05 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
iiyama, нет) я серьёзно. Прикладываю скриншот. Konst_One, SQL Server 2012 (x64) в стоечном сервере IBM с 32 ГБ ОЗУ. aleksrov, ;) полагаю, мы делаем, что то не правильно, я здесь и пытаюсь разобраться. Сам я НЕ обслуживаю БД, я с ней работаю, тот кто обслуживает говорит, что планы настроил в соответствии с инструкцией которую получил от поставщика ПО. alexeyvg, alexeyvg1.а Шринк срочно уберите, он раз за разом замедляет работу базы. Сейчас уберу. То есть оставляю только: бекап и индексацию? И ещё момент: шринк вообще отключать на совсем? или не делать его ежедневно? Со слов технаря он отключал шринк, но тогда лог вырастает до 200Гб. alexeyvg1.б Пытайтесь оптимизировать работу приложения, например, модифицируйте его, если возможно, или попытайтесь построить недостающие индексы. Приложение не наше, не доступно для изменения, и относительно часто обновляется, поэтому даже доступные для изменения хранимые процедуры, которые использует приложение не хочется трогать, т.к. в случае будущих обновлений можно что-либо упустить. И изменять структуру БД уж совсем не хочется. alexeyvg2. Вообще должно уменьшаться, раз удаляете. а вообще после обширного удаления данных что необходимо сделать? переиндексацию? alexeyvg3. Нормально. Если на сервере запущены ещё какие то приложения, кроме MSSQL, то можете ограничить ему память. Он забирает столько памяти, сколько дадут. Понял! Нет, сервер исключительно под БД, пусть забирает всю ОЗУ. Параллельно веду переписку с разработчиком ПО, они говорят, что база огромна и надо расчищать :-\ только после расчистки надо оценить поможет или нет и смотреть дальше. Будем расчищать, но процесс не быстрый, во время работы это не возможно делать, пользователи жалуются на тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 15:29 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
@база 65Гб @тормозит @половина базы влазит в память @разработчиком ПО, они говорят, что база огромна что это за зверь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 15:34 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
интересно было бы посмотреть текущие настройки вашей базы: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 15:39 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
так, сейчас ещё раз всё проверил лично по обслуживанию, оказывается включен в плане на текущий момент только бекап и за ним шринк. Индексацию выключали и не помнят когда. Если быть точным то вот так: 1) Ежедневное (разностное) копирование - ежедневно кроме понедельника в 02:30 (проверка целостности, резервное копирование БД(разностное), очистка после обслуживания, очистка журнала) 2) Еженедельное полное копирование - по понедельникам в 02:30 (проверка целостности, резервное копирование БД(полное), очистка после обслуживания, очистка журнала) 3) шринк - каждые 6 часов начиная с 04:00 и до 23:59 (резервное копирование (журнал транзакций), сжатие бд, очистка журнала, очистка после обслуживания(удаление резервного копирования бд), очистка после обслуживания(отчёт плана обслуживания)). Вижу план на выполнение команд: Код: sql 1. 2. 3. 4. но он отключен. Обслуживающий человек говорит, что данная задача просто вешала базу, работать не возможно, за ночь не успевала выполниться, поэтому и отключил. На сколько я понимаю, по этому плану БД уходит в монопольный режим и надо ждать её выполнения, но это слишком долго. Подскажете как быть? Мне приходит в голову идея сначала очищать базу до максимально возможного и на ночь включать пересоздание индексов. Только вот очищать базу мы будем примерно месяц. Или сейчас, пока идёт очистка, делать обновление статистики (exec sp_msforeachtable 'update statistics ?') и дефрагментацию индексов(exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')' ? Ещё вопрос: а нормально ли это, что БД весит 65Гб, из которых почти половину занимает именно index_size ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:11 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Konst_Oneинтересно было бы посмотреть текущие настройки вашей базы: Код: sql 1. для удобства чтения транспонировал: database_id 8 source_database_id NULL owner_sid 0x01 create_date 14.10.2017 15:02 compatibility_level 110 collation_name Cyrillic_General_CI_AS user_access 0 user_access_desc MULTI_USER is_read_only 0 is_auto_close_on 0 is_auto_shrink_on 1 state 0 state_desc ONLINE is_in_standby 0 is_cleanly_shutdown 0 is_supplemental_logging_enabled 0 snapshot_isolation_state 0 snapshot_isolation_state_desc OFF is_read_committed_snapshot_on 0 recovery_model 1 recovery_model_desc FULL page_verify_option 2 page_verify_option_desc CHECKSUM is_auto_create_stats_on 1 is_auto_update_stats_on 1 is_auto_update_stats_async_on 0 is_ansi_null_default_on 0 is_ansi_nulls_on 0 is_ansi_padding_on 0 is_ansi_warnings_on 0 is_arithabort_on 0 is_concat_null_yields_null_on 0 is_numeric_roundabort_on 0 is_quoted_identifier_on 0 is_recursive_triggers_on 0 is_cursor_close_on_commit_on 0 is_local_cursor_default 0 is_fulltext_enabled 1 is_trustworthy_on 0 is_db_chaining_on 0 is_parameterization_forced 0 is_master_key_encrypted_by_server 0 is_published 0 is_subscribed 0 is_merge_published 0 is_distributor 0 is_sync_with_backup 0 service_broker_guid 72CB2F71-261E-4A89-A054-5F1AB23A5A24 is_broker_enabled 0 log_reuse_wait 2 log_reuse_wait_desc LOG_BACKUP is_date_correlation_on 0 is_cdc_enabled 0 is_encrypted 0 is_honor_broker_priority_on 0 replica_id NULL group_database_id NULL default_language_lcid NULL default_language_name NULL default_fulltext_language_lcid NULL default_fulltext_language_name NULL is_nested_triggers_on NULL is_transform_noise_words_on NULL two_digit_year_cutoff NULL containment 0 containment_desc NONE target_recovery_time_in_seconds 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:15 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, recovery_model_desc FULL + единственный полный бэкап раз в сутки = пятница удалась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:26 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, для начала сразу: Код: sql 1. 2. Из плана обслуживания нафиг уберите shrink, это довольно вредная операция. У вас что там в базе постоянно большой объем данных прибавляется и одновременно чистится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:41 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
хм. сорян поспешил не дочитав первый пост. Если вам базу надо почистить а объем удаляемых данных превышает объемы данных для хранения имеет смысл перелить нужные данные в новые таблицы, удалить старые, переименовать новые названиями старых таблиц. после этого разово сделать shrink для базы. Порционно удаляя данные и делая каждую ночь shrink вы будете наблюдать картину "торможения" приложения еще очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:50 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
iiyama, тот неловкий момент, но я не понял шутку) полагаю у нас не правильный бекап, с ним пока не разбирался даже. И, кстати, у нас настроено полное зеркалирование БД на аналогичный сервер. felix_ff, felix_ffдля начала сразу: Код: sql 1. 2. Выполнение команд успешно завершено felix_ffИз плана обслуживания нафиг уберите shrink, это довольно вредная операция. в плане обслуживания шринк ОТКЛЮЧИЛ лично, появился красная стрелочка вниз у иконки. felix_ffУ вас что там в базе постоянно большой объем данных прибавляется и одновременно чистится? Прибавляется - да. И вот только пару дней как я запустил свой скрипт расчистки, теперь и удаляется примерно в 2 раза больше чем добавляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:54 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, извиняюсь за несколько грубую аналогию, но ваша ситуация с базой напоминает старый анекдот про козла, который " сильно задрочен, но жить будет "(с). Вам бы нужно "остричь" вашего "козла", "помыть" и "причесать", а вы его - доить пытаетесь... Теперь несколько мыслей по существу: 1) Бэкапы. В общем случае принято делать не только полный бэкап базы, но и периодические бэкапы транзакт-лога (между полными бэкапами). Периодичность выбирать исходя из интенсивности изменения данных и желаемого размера транзакт-лога. В этом случае размер лога не будет выходить "за рамки приличия". А его шринки станут невостребованной операцией. 2) Статистика. У MS SQL Server хороший и сильный оптимизатор запросов, но он основан не на "телепатии", а на "стоимости операций", для расчета которой требуется актуальная информация по таблицам, индексам и распределению данных в них. Поэтому задача по своевременному обновлению устаревших статистик - одна из важных при обслуживании базы. Необязательно это делать каждый день, для всех таблиц и полным сканированием. Но делать это надо. 3) Индексы. Их отсутствие может приводить к печальным результатам в производительности. Но наличие "неподходящих" или плохо обслуживаемых "деградировавших" индексов - не намного лучше. Начните с малого: список проблемных запросов вам известен. Посмотрите их планы; обновите статистику по таблицам, участвующим в этих запросах; убедитесь, что схема индексирования таблиц удовлетворяет условиям фильтрации и соединения данных в запросах. Сриптов по поиску и обновлению устаревшей статистики, поиску отсутствующих индексов, поиску сильно фрагментированных индексов- в интернете пруд-пруди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 18:19 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, Судя по приведенным параметрам - автообновление статистики у вас включено. Возможно, таблицы растут не настолько быстро, чтобы успел сработать автосбор, но достаточно быстро, чтобы планы успели "поехать". Меня "сейчас, должно быть, будут убивать"(с) но считаю, что на вашей версии сервера вполне себе целесообразно активировать trace flag 2371, и, возможно, перевести параметр is_auto_update_stats_async_on в true ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 18:51 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, Если честно очень сложно обьяснить как должно быть когда человек полный 0 (это не камень в ваш огород, просто факт). Правда, почитайте про то что такое шринк, виды резервного копирования, модели восстановление и по многому озарение придет само. У меня везде включены флаги 1117, 1118, 2371. Выгоняйте нахрен вашего технаря который говорит что если не шринковать лог то будет капец. Почему НЕ НАДО делать шринк, здесь https://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/ https://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/ Про шринк лога https://stackoverflow.com/questions/56628/how-do-you-clear-the-sql-server-transaction-log У вас 50% базы в оперативе, вы счастливый человек. Дело не в кол-во данных, а в корявых запросах, ищите и оптимизируйте. Анна - "Периодичность выбирать исходя из интенсивности изменения данных и желаемого размера транзакт-лога". Периодичность выбирают исходя из RPO а не из интенсивности изменения данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 19:05 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, кстати да Щукина Анна правильно подметила. У вас сейчас модель восстановления базы FULL, соответственно вам необходимо настроить периодически что бы делались бэкапы лога транзакций, иначе он неизбежно будет расти. на счет чистки как я уже сказал вам надо оценить объемы работы по удалению. Если у вас на выхлопе вы допустим с таблицы в миллиард строк хотите видите что данные которые необходимо оставить составляют к примеру 20 миллионов, а остальная часть таблицы идет под удаление. то выгодней будет перелить нужные данные в новую таблицу, старую дропнуть и потом переименовать. При этом если по каким то сакральным причинам вам необходимо отдать освободившееся место системе (к примеру размер файла БД подходит к границам диска а добавлять место вам по политическим наставлениям запрещает Папа Римский) То ваши действия должны быть такими 1) переливаем нужные данные в новую таблицу (желательно что бы новая таблица размещалась в другой файловой группе) 2) делаем drop table или truncate старых таблиц 3) делаем shrinkfile файлов данных объем которых необходимо уменьшить 4) переименовываем новые таблицы в старые 5) настраиваем правильное обслуживание статистики и индексов ну а если у вас ситуация такова что процентное соотношение удаляемых к сохраняемым данным приблизительно равно, тогда вот вам неплохая статья касательно порционного удаления данных. https://sqlperformance.com/2013/03/io-subsystem/chunk-deletes ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 19:08 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
aleksrovПериодичность выбирают исходя из RPO а не из интенсивности изменения данных.те же "яйца", только в профиль.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 19:08 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Параллельно веду переписку с разработчиком ПО, они говорят, что база огромна и надо расчищать :-\ только после расчистки надо оценить поможет или нет и смотреть дальше.К сожалению большинство разработчиков ленивые и мало что понимают в оптимизации баз данных. А еще у них нет вашей копии базы. Им даже просто не хочется тратить время на выяснение почему там у пары клиентов что-то тормозит, больше денег они за это все равно не получат. На их тестовых базах в 10МБ все летает, так что да, конечно же проблема в том что база разрослась. Поэтому советы по производительности от вендоров обычно сводятся к обновлению статистики и перестроению индексов. Так что самая реальная возможность что то исправить это смотреть на медленные запросы и планы самому, если сами не понимаете, выкладывайте планы сюда. Ну а там обычно 2 варианта: отсутсвуют индексы или нужно переписывать запрос. Если индексы, то просто создаете их, вряд ли разрабы накатывают апдейты путем пересоздания таблиц. Ну или можете попробовать пропихнуть это в их обновления. Разницы особой нет. Если же нужно переписывать запрос/процедуру, тогда придется долго и упорно вести переписку с разрабами о том почему их код кривой и как можно все исправить, может они согласятся и включат ваши фиксы в следующие обновления. Serg58rows: 22931608/22877252 (удалил 54356 записей)Это работа скрипта за ночь? Меньше 1% строк? У вас наверное новые данные быстрее добавляются. Возможно ваш скрипт неопимизирован. Удаляет по одной строке и индексов на внешних ключах вообще нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 20:39 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, Начните с недостающих индексов. Запустите вот этот скрипт на вашей базе. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 20:53 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58И ещё момент: шринк вообще отключать на совсем? или не делать его ежедневно? Со слов технаря он отключал шринк, но тогда лог вырастает до 200Гб.Да, насовсем. Файл должен вырасти до некоторого размера, а потом стабилизироваться. Скорее всего, для выполнения некоторых действий (например, реиндексации) нужен запас пространства, вот файл и растёт. после выполнения этих действий место в файле освобождается. Так зачем сокращать файл, если он потом всё равно расширится? Шринк - это аварийная разовая операция, которая делается для устранения последствий каких либо ошибок в эксплуатации базы, делать его нужно не по расписанию, а обдуманно, и вместе с устранением этих ошибок. Serg58а вообще после обширного удаления данных что необходимо сделать? переиндексацию?Да, можно перестроить индексы, после завершения всего процесса удаления (не очередной порции) Serg58Приложение не наше, не доступно для изменения, и относительно часто обновляется, поэтому даже доступные для изменения хранимые процедуры, которые использует приложение не хочется трогать, т.к. в случае будущих обновлений можно что-либо упустить. И изменять структуру БД уж совсем не хочется.Да, это понятно, ну вот, на этот случай я добавил про "индексы". Проанализируйте профайлером долгие запросы, посмотрите рекомендации сервера (он их показывает при просмотре планов), и возможно либо решите проблему созданием индексов, либо обновлением статистики, либо хотя бы передадите конкретику разработчикам. Serg58Параллельно веду переписку с разработчиком ПО, они говорят, что база огромна и надо расчищать :-\Это яркий и однозначный признак непрофессионализма разработчиков. Не должны старые данные влиять на скорость выполнения оперативных транзакций. Serg58полагаю, мы делаем, что то не правильно, я здесь и пытаюсь разобраться. Сам я НЕ обслуживаю БД, я с ней работаю, тот кто обслуживает говорит, что планы настроил в соответствии с инструкцией которую получил от поставщика ПО.И к тем, кто обслуживает, тот же самый вопрос. Почему разбираетесь вы, а не они, почему не они задают тут вопросы, почему не они дают вам эти советы, и вообще, просто не решают проблемы, что бы вы и пользователи их даже не заметили? "Планы настроил в соответствии с инструкцией"? Он кто, секретарша-машинистка, тексты набирает по инструкции, или специалист по MSSQL? Serg58Индексацию выключали и не помнят когда.Вообще говоря, перестроение индекса нужно, что бы устранить последствия шринка (и для других подобных случаев). Для нормального использования индексов их не нужно перестраивать. Достаточно обновлять статистику, да и то можно не каждый день. Serg58Мне приходит в голову идея сначала очищать базу до максимально возможного и на ночь включать пересоздание индексов. Только вот очищать базу мы будем примерно месяц.Вот через месяц всё это и сделаете. Уберите шринк, сделаете его вручную после очистки, тогда же сделаете и переиндексацию В ежедневных джобах оставьте бакап и статистику, последнюю можно попробовать перенести на выходные, если не будет хватать времени. Serg583) шринк - каждые 6 часов начиная с 04:00 и до 23:59 (резервное копирование (журнал транзакций), сжатие бд, очистка журнала, очистка после обслуживания(удаление резервного копирования бд), очистка после обслуживания(отчёт плана обслуживания)).:-) В общем, напихали всё, про что прочитали :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 22:32 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо всем за ответы! iiyama, iiyamaSerg58, recovery_model_desc FULL + единственный полный бэкап раз в сутки = пятница удалась полный бекап у нас раз в неделю по понедельникам, а ежедневно - разностный. Я уже понял, что это не правильно, с этим буду разбираться позже, сейчас разобраться с тормозами. Щукина Анна, Щукина АннаSerg58, извиняюсь за несколько грубую аналогию, но ваша ситуация с базой напоминает старый анекдот... всё именно так, полностью с Вами согласен. Я работаю с базой как её пользователь, обслуживать её вообще не моя работа, не мой отдел. Но жутко надоели тормоза, технари говорят, что всё в соответствии как указано разработчиком ПО, а тех.поддержка говорит присылайте логи, очищайте базу и т.д. Решил сам разобраться. Щукина Анна1) Бэкапы. В общем случае принято делать не только полный бэкап базы, но и периодические бэкапы транзакт-лога (между полными бэкапами). Периодичность выбирать исходя из интенсивности изменения данных и желаемого размера транзакт-лога. В этом случае размер лога не будет выходить "за рамки приличия". А его шринки станут невостребованной операцией. Про бекап, повторюсь, буду разбираться отдельно. Сейчас у нас полное зеркалирование БД идёт в 2 сервер. И вот эти бекапы, о которых писал выше. Щукина Анна2) Статистика. У MS SQL Server хороший и сильный оптимизатор запросов, но он основан не на "телепатии", а на "стоимости операций", для расчета которой требуется актуальная информация по таблицам, индексам и распределению данных в них. Поэтому задача по своевременному обновлению устаревших статистик - одна из важных при обслуживании базы. Необязательно это делать каждый день, для всех таблиц и полным сканированием. Но делать это надо. 3) Индексы. Их отсутствие может приводить к печальным результатам в производительности. Но наличие "неподходящих" или плохо обслуживаемых "деградировавших" индексов - не намного лучше. Вооот! Сейчас у меня начинает вырисовываться то что у нас произошло: база заполнялась, не чистилась(СОВСЕМ), не обслуживалась(только бекап и шринк). Тут мы запустили расчистку, удалилось множество данных и после этого запрос который до этого выполнялся - стал выполнятся в разы дольше. Думается мне, что если запустить обновление статистики и дефрагментацию индексов запрос будет выполнятся в разы быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 22:55 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
alexeyvgSerg58а вообще после обширного удаления данных что необходимо сделать? переиндексацию?Да, можно перестроить индексы, после завершения всего процесса удаления (не очередной порции) Правильно ли я понял, что после порционного удаления можно делать обновление статистики (exec sp_msforeachtable 'update statistics ?') а когда расчистим базу сильно сделать переиндексацию(exec sp_msforeachtable 'dbcc dbreindex(''?'')') Два вопроса: 1) когда нужно использовать дефрагментацию индексов(exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')' ? 2) сейчас у нас стоит цель из 22млн(основной таблицы) расчистить не нужные нам данные, это где то 50-80%, и мы выйдем на ориентировочно следующий цикл: в день поступает ~30-50 тысяч новых записей, и примерно столько же будет удаляться старых(которые отлежали примерно год в базе), в таком случае какой принцип обслуживания, когда что делать? alexeyvgПроанализируйте профайлером долгие запросы, посмотрите рекомендации сервера (он их показывает при просмотре планов), и возможно либо решите проблему созданием индексов, либо обновлением статистики, либо хотя бы передадите конкретику разработчикам. Всё же я думаю, что для начала надо досконально разобраться с обслуживанием БД. По большому счёту когда БД только запустили и данных было мало, их никто не удалял - всё работало быстро(ну, относительно быстро). А тут запустили удаление старых данных и сразу же появились проблемы с тем, что раньше работало. Причём работает это именно с теми таблицами, которые очищаются. alexeyvgИ к тем, кто обслуживает, тот же самый вопрос. Почему разбираетесь вы, а не они, почему не они задают тут вопросы, почему не они дают вам эти советы, и вообще, просто не решают проблемы, что бы вы и пользователи их даже не заметили? "Планы настроил в соответствии с инструкцией"? Он кто, секретарша-машинистка, тексты набирает по инструкции, или специалист по MSSQL? Ой, это отдельная и очень сложная тема. Я ему не начальник, совершенно другой отдел, просто мне не всё равно. Вопрос этот очень обширный и совсем не по теме. alexeyvgУберите шринк, сделаете его вручную после очистки, тогда же сделаете и переиндексацию В ежедневных джобах оставьте бакап и статистику, последнюю можно попробовать перенести на выходные, если не будет хватать времени. шринк уже убрал, и в планах его отключил, и командой что дали здесь выше. Статистику и дефрагментацию индексов я сегодня вечером прогнал на более мелких базах - всё ок. В понедельник у меня будет возможность запустить обновление статистики и на основной самой большой базе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 23:27 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Правильно ли я понял, что после порционного удаления можно делать обновление статистики (exec sp_msforeachtable 'update statistics ?') а когда расчистим базу сильно сделать переиндексацию(exec sp_msforeachtable 'dbcc dbreindex(''?'')')Да. Serg58Два вопроса: 1) когда нужно использовать дефрагментацию индексов(exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')' ? 2) сейчас у нас стоит цель из 22млн(основной таблицы) расчистить не нужные нам данные, это где то 50-80%, и мы выйдем на ориентировочно следующий цикл: в день поступает ~30-50 тысяч новых записей, и примерно столько же будет удаляться старых(которые отлежали примерно год в базе), в таком случае какой принцип обслуживания, когда что делать?1. Когда индексы фрагментируются. Погуглите скрипты, они обычно оценивают уровень фрагментации, и потом делают дефрагментацию, если надо. Но можно не связываться, а делать (редко, раз в месяц, например) перестроение индексов, или вообще никогда не делать - зависит от вашей системы. 2. Делать обновление статистики раз в неделю. Serg58А тут запустили удаление старых данных и сразу же появились проблемы с тем, что раньше работало. Причём работает это именно с теми таблицами, которые очищаются.Это может быть из за неактуальной статистики, или от шринка. Serg58Думается мне, что если запустить обновление статистики и дефрагментацию индексов запрос будет выполнятся в разы быстрее.Да, или статистику и дефрагментацию, или перестроить индексы (вместе и то и другое не надо - при перестроении статистика становится актуальной, и фрагментация исчезает). Serg58Щукина Анна1) Бэкапы. В общем случае принято делать не только полный бэкап базы, но и периодические бэкапы транзакт-лога (между полными бэкапами). Периодичность выбирать исходя из интенсивности изменения данных и желаемого размера транзакт-лога. В этом случае размер лога не будет выходить "за рамки приличия". А его шринки станут невостребованной операцией. Про бекап, повторюсь, буду разбираться отдельно. Сейчас у нас полное зеркалирование БД идёт в 2 сервер. И вот эти бекапы, о которых писал выше.Если у вас модель полная, и нет бакапа лога, то разобраться с этим - первоочередная задача, потому что все изменения, которые вы делаете с данными (в том числе удаляемые старые данные) остаются в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 23:39 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
MindSerg58rows: 22931608/22877252 (удалил 54356 записей)Это работа скрипта за ночь? Меньше 1% строк? У вас наверное новые данные быстрее добавляются. Возможно ваш скрипт неопимизирован. Удаляет по одной строке и индексов на внешних ключах вообще нет? сейчас скрипт работает в режиме теста, он забирает из базы 100 тысяч записей (на это уходит от 0 до 6 секунд) и в цикле проверяет каждую строку, если она удовлетворяет условиям - вызывается хранимая процедура(которую делал не я, а разработчики ПО) и удаляет передаваемое ей значение(id записи). Удаляет процедура и в нескольких взаимосвязанных таблицах, во всех них есть столбец с этим id который я передаю ей. Тот результат что я давал удалил из 100 тысяч - 54356 записи только в основной таблице, в смежных таблицах ещё больше, ибо несколько таблиц много записей к одной id из основной. Работал этот скрипт 64 минуты, скрипт на питоне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 23:39 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
alexeyvg, большое Вам спасибо за комментарии! alexeyvgЕсли у вас модель полная, и нет бакапа лога, то разобраться с этим - первоочередная задача, потому что все изменения, которые вы делаете с данными (в том числе удаляемые старые данные) остаются в базе. хм...у нас сейчас по понедельникам полный бекап, а каждый следующий день - разностный бекап. Этого не достаточно? ещё я почитал несколько статей, тем и составил себе следующий план, прокомментируйте, пожалуйста, не ошибся ли я: 1.отключить шринк, совсем - сделано 2.в связи с отключением шринка посмотреть сколько будет весить журнал(лог), если он будет слишком огромный просчитать вариант перехода на 2-3 полных бекапа в неделю, вместо одного, либо вообще рассмотреть вариант отказа от разностного(дифференцированного) варианта и перейти на бекап лога (журнал транзакций). 3.завтра(в понедельник) сделать обновление статистики (exec sp_msforeachtable 'update statistics ?') и дефрагментацию индексов(exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')' и проверить как будет выполняться тот долгий запрос. 4.расчистить БД от ненужных данных (ориентирочно база должна уменьшится на 50-70%) 5.после окончания расчистки, сделать её ежедневной, что бы не копилось ненужное. 6.после окончания расчистки сделать переиндексацию (exec sp_msforeachtable 'dbcc dbreindex(''?'')') 7.настроить раз в неделю обновление статистики (exec sp_msforeachtable 'update statistics ?') (вопрос: её делать ПЕРЕД полным бекапом или ПОСЛЕ бекапа? ) 8.воспользоваться скриптами для определения фрагментации индексов, и определиться нужно ли делать дефрагментацию индексов(exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')', либо просто раз в месяц поставить. смотреть как работает БД, если проблемы с тормозами не решатся, то профайлером смотреть долгие запросы, их планы и разбираться с конкретными запросами, возможно, действительно не хватает каких-либо индексов. вот пока всё. ещё прочитал про очистку процедурного кэша (DBCC FREEPROCCACHE), но пока не понял, надо ли оно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 00:02 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58alexeyvgЕсли у вас модель полная, и нет бакапа лога, то разобраться с этим - первоочередная задача, потому что все изменения, которые вы делаете с данными (в том числе удаляемые старые данные) остаются в базе. хм...у нас сейчас по понедельникам полный бекап, а каждый следующий день - разностный бекап. Этого не достаточно? 2.в связи с отключением шринка посмотреть сколько будет весить журнал(лог), если он будет слишком огромный просчитать вариант перехода на 2-3 полных бекапа в неделю, вместо одного, либо вообще рассмотреть вариант отказа от разностного(дифференцированного) варианта и перейти на бекап лога (журнал транзакций). В полной модели лог хранится вечно , он не удаляется дифф или полными бакапами, шринком и т.д. Освободить место в файле лога можно только бакапом лога, и никак иначе. Либо вообще ничего там не хранить, переведя базу с полной модели на простую. Serg58ещё прочитал про очистку процедурного кэша (DBCC FREEPROCCACHE), но пока не понял, надо ли оно.Обычно это делают для тестирования, регулярно не надо. В остальном да, ну, может мелочь какая то. Обновлять статистику до или после бакапа - неважно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 01:03 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
alexeyvgЛибо вообще ничего там не хранить, переведя базу с полной модели на простую.Судя по тому, как ТС притворяет рекомендации с форума в жизнь своей системы - не мешало бы уточнить, чем чревато держать базу в режиме Simple. Кроме того, ТС пару раз упоминал о зеркалировании. Непонятно, что за зеркалирование и на чем построено. Может там лог-шиппинг, несовместимый с простым режимом или ещё что-то.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 07:29 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина АннаalexeyvgЛибо вообще ничего там не хранить, переведя базу с полной модели на простую.Судя по тому, как ТС притворяет рекомендации с форума в жизнь своей системы - не мешало бы уточнить, чем чревато держать базу в режиме Simple.Просто начинающему не-сиквелисту не рассказать про весь сиквел в обычном ответе на вопрос, поэтому я не стал углубляться. Ну и бакап лога не делается, а лог они видимо очищают каким то надыбанным в инете скриптом, поэтому хуже уже не будет :-) Наверное, их устраивает возможность восстановления на время создания дифф бакапа, ну и ладно. Щукина АннаКроме того, ТС пару раз упоминал о зеркалировании. Непонятно, что за зеркалирование и на чем построено. Может там лог-шиппинг, несовместимый с простым режимом или ещё что-то....Да, я тоже заметил. Ну, если лог нужен для зеркалирования, сиквел про это скажет, не даст перевести в симпл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 08:48 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
alexeyvgВ полной модели лог хранится вечно , он не удаляется дифф или полными бакапами, шринком и т.д. Освободить место в файле лога можно только бакапом лога, и никак иначе. Либо вообще ничего там не хранить, переведя базу с полной модели на простую. я запутался) Теперь всё ясно. Лог мы не бекапили совсем, только база полностью + разностная. Сегодня настроим бекап лога и посмотрим как будет очищаться. Вновь, спасибо большое за разъяснение. Щукина АннаalexeyvgЛибо вообще ничего там не хранить, переведя базу с полной модели на простую.Судя по тому, как ТС притворяет рекомендации с форума в жизнь своей системы - не мешало бы уточнить, чем чревато держать базу в режиме Simple. Кроме того, ТС пару раз упоминал о зеркалировании. Непонятно, что за зеркалирование и на чем построено. Может там лог-шиппинг, несовместимый с простым режимом или ещё что-то.... простая модель нам не подойдёт, наш вариант зеркалирования только на полной работает. Про зеркалирование я пока вообще не скажу, но это рядом стоящий аналогичный сервер, куда зеркально копируется БД. Пару раз меняли их местами, если не ошибаюсь из-за гибели жёсткого диска, в тот момент я вообще не касался обслуживания, но ребята, на сколько я знаю просто меняют имя хоста, запускают какой-то скрипт и зеркало становится основным сервером прямо за считанные минуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 09:15 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
за выходные скрипт по очистке бд отработал (пятница/сейчас): rows: 22868517/21984800 (удалил 883717 записей) reserved: 11132904/11185256 (увеличилось на 52352) data: 2455856/2466800 (увеличилось на 10944) index_size: 8669640/8698808 (увеличилось на 29168) unused: 7408/19648 (увеличилось на 12240) уточню, что это результаты только по основной таблице, помимо неё удаление происходит ещё в ~5 связанных таблицах. Не совсем понимаю результаты. Почему reserved и data увеличились? Если данные удалились?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 09:26 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58за выходные скрипт по очистке бд отработал (пятница/сейчас): rows: 22868517/21984800 (удалил 883717 записей) reserved: 11132904/11185256 (увеличилось на 52352) data: 2455856/2466800 (увеличилось на 10944) index_size: 8669640/8698808 (увеличилось на 29168) unused: 7408/19648 (увеличилось на 12240) уточню, что это результаты только по основной таблице, помимо неё удаление происходит ещё в ~5 связанных таблицах. Не совсем понимаю результаты. Почему reserved и data увеличились? Если данные удалились?!Во-первых, непонятно - что и как считает Ваш скрипт. Во-вторых, никто не обещал, что освободившееся место после удаления данных будет использоваться для повторный вставок. Особенно, если у Ваших таблиц есть монотонно-растущий кластерный индекс, а процесс удаления данных - не освобождает страницы полностью, а лишь удаляет с них часть данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 09:41 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Сейчас сделали обновление статистики (exec sp_msforeachtable 'update statistics ?') выполнялся 6 минут. После этого пропала проблема с timeout в программе с тем долгим запросом. Сейчас запустили дефрагментацию (exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')) уже 20 минут, ждём. Вываливает статистику, есть и pages moved, есть и pages removed. Из того что вижу сейчас, примерно 1-3% removed в большинстве результатов. Щукина АннаВо-первых, непонятно - что и как считает Ваш скрипт. Сначала пишет в лог данные из запроса exec sp_spaceused N'table_name' потом удаляет выборочно данные хранимой процедурой от разработчика ПО в завершение своей работы снова пишет значения из exec sp_spaceused N'table_name', их я и цитирую. Щукина АннаВо-вторых, никто не обещал, что освободившееся место после удаления данных будет использоваться для повторный вставок. Особенно, если у Ваших таблиц есть монотонно-растущий кластерный индекс, а процесс удаления данных - не освобождает страницы полностью, а лишь удаляет с них часть данных. Понял, спасибо. Тогда просто продолжаем чистить, игнорируя цифры статистики, а БД сама разберётся. За дисковым пространством мы особо не гонимся, главное что бы быстро работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 10:03 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58 За дисковым пространством мы особо не гонимся, главное что бы быстро работало.Это вы зря так.... Полупустые страницы не только ведь диск заполняют, но страничный КЭШ скульсервера. Сервер же хоть на диски, хоть в памяти - оперирует всё теми же страницами. И если на странице всего одна запись, то под её размещение в памяти будет выделенно положенных 8к. Поэтому выгоднее иметь мало сильнозаполненных страниц, чем много, но практически пустых. Плотнее запись данных на страницу --> больше данных можно закэшировать в аналогичный размер ОЗУ --> выше вероятность найти нужные данные в памяти --> потенциальное снижение логического и (что более важно) физического ввода-вывода. Но вы в сторону перестроения/реорганизации индексов уже смотрите. Значит, проблема будет решаться при следующих итерациях обслуживания базы... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 10:31 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина АннаSerg58 За дисковым пространством мы особо не гонимся, главное что бы быстро работало.Это вы зря так.... Полупустые страницы не только ведь диск заполняют, но страничный КЭШ скульсервера. Сервер же хоть на диски, хоть в памяти - оперирует всё теми же страницами. И если на странице всего одна запись, то под её размещение в памяти будет выделенно положенных 8к. Поэтому выгоднее иметь мало сильнозаполненных страниц, чем много, но практически пустых. Плотнее запись данных на страницу --> больше данных можно закэшировать в аналогичный размер ОЗУ --> выше вероятность найти нужные данные в памяти --> потенциальное снижение логического и (что более важно) физического ввода-вывода. Но вы в сторону перестроения/реорганизации индексов уже смотрите. Значит, проблема будет решаться при следующих итерациях обслуживания базы... :) автор2) индексирование как ещё по вашему надо "гнаться" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 10:33 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, спасибо, всё больше и больше начинаю осознавать происходящее и выстраивать путь к совершенству ;) К сожалению, дефрагментация (exec sp_msforeachtable 'dbcc INDEXDEFRAG (BDname, ''?'')) НЕ ВЫПОЛНИЛАСЬ! Примерно 50 минут делалась и выдало: Произошла ошибка при выполнении пакетного файла. Сообщение об ошибке: Неустранимая ошибка подключения. Состояние ошибки: 15, Токен: 54 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 10:41 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, " - А разве можно съесть слона? - Можно, если кушать его по частям! "(с) Зря вы мучаете базу массовыми мероприятиями... Действуйте точечно. Если взялись за определенный список таблиц - то с ними и работайте. 1) Выполните очистку таблиц 2) Выполните перестроение/реорганизацию только тех индексов, что принадлежат таблицам, попавшим под обслуживание. 3) Делайте все операции по-объектно: каждый индекс отправляйте в обработку отдельной командой. Если что-то будет "падать с ошибками" - будет, по крайней мере, понятно - на каком этапе, и на каком объекте упала обработка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 10:51 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, кстати, какой именно у вас SQL Server 2012 ? Имеется ввиду его редакция - standart / enterprise? А лучше - покажите полный вывод команды: select @@version ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 10:57 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58сейчас скрипт работает в режиме теста, он забирает из базы 100 тысяч записей (на это уходит от 0 до 6 секунд) и в цикле проверяет каждую строку, если она удовлетворяет условиям - вызывается хранимая процедура(которую делал не я, а разработчики ПО) и удаляет передаваемое ей значение(id записи). Удаляет процедура и в нескольких взаимосвязанных таблицах, во всех них есть столбец с этим id который я передаю ей. Тот результат что я давал удалил из 100 тысяч - 54356 записи только в основной таблице, в смежных таблицах ещё больше, ибо несколько таблиц много записей к одной id из основной. Работал этот скрипт 64 минуты, скрипт на питоне.Сразу напрашивается оптимизация - выбирать в обработку только те данные, что удовлетворяют условиям обработки, а не все подряд :). То есть, перенести условия проверки из цикла обработки - в процесс отбора записей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:02 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Аннаselect @@version Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 15:14:48 Copyright (c) Microsoft Standart Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:02 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина АннаСразу напрашивается оптимизация - выбирать в обработку только те данные, что удовлетворяют условиям обработки, а не все подряд :). То есть, перенести условия проверки из цикла обработки - в процесс отбора записей... Изначально так и было, наоборот переделал под тот вариант, как сейчас. По 2 причинам: 1.хочу видеть статистику сколько записей было удалено (хотя это можно реализовать и с условием в sql) 2.когда я использовал условие в where запроса, сам запрос выполнялся слиииишком долго. Если выгрузить всё подряд от 0 до 6 секунд, то с условием выходило больше минуты. Вероятно сейчас, после обновления статистики, будет лучше и быстрее с where. Но это не первоочередная задача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:07 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, ну, "хозяин - барин"(с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:23 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, в целом - прогресс в сторону увеличения производительности системы наметился? в любом случае - рекомендую пересмотреть индексацию наиболее критических таблиц. Возможно, что индексы не оптимальны для тех запросов, что работают в системе. Не стоит забывать доступные в 2012 стандарт возможности - фильтрованные индексы (для "точечной настройки" отбельных критичных запросов) и индексы с include-полями (для охвата индексами бОльшего числа запросов с возможности полного их "покрытия" - получение ответа на запрос исключительно чтением индекса, без обращения к базовой таблице) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:31 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина АннаSerg58, в целом - прогресс в сторону увеличения производительности системы наметился? ДА! В основном помогло за 5 минут обновление статистики. Тот запрос, который вообще сподвиг меня заняться всем этим выполнялся 45 секунд, а программа прикладная ждёт всего 30 секунд и потом выдаёт timeout и собственно не работает. Мы отключали этот функционал и работали без него. Вот утром сегодня обновили статистику и сейчас этот запрос выполняется просто моментально. Потихонечку начинает рости лог базы, сегодня будем полностью переделывать план бекапа. Бекап лога не делался вообще. Правильно я разобрался? схема следующая: 1. в ночь на понедельник делаем полное резервное копирование базы данных (Full Backup) (проверка целостности БД, обновление статистики, резервное копирование БД(полное), очистка плана обслуживания) 2. в каждый другой день делаем (проверка целостности БД, резервное копирование БД(разностное), резервное копирование БД (журнал транзакций), очистка после обслуживания) и раз в месяц делать задачу "реогранизация индекса" (хотя с индексами будем отдельно заниматься, коллега уже изучает скрипты по анализу фрагментированности индексов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:52 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, теперь ещё Код: sql 1. и скорее всего в индексы в не попадаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:56 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaKи скорее всего в индексы в не попадаете Вот эту фразу не совсем понял. fullscan статистики в ночь включу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 11:58 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58TaPaKи скорее всего в индексы в не попадаете Вот эту фразу не совсем понял.это как раз о том, что индексы к запросам не подходят. возможно, вместо SEEK-ов выполняются "более затратные" SCAN-ы. Или случаются LookUp-ы там, где можно было бы обойтись индексом с нужным списком INCLUDE-полей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:03 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58TaPaKи скорее всего в индексы в не попадаете Вот эту фразу не совсем понял. fullscan статистики в ночь включу. если не смотрите в конкретные запросы, то начните например https://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/ с фильтром на ваши основные объекты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:09 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaKесли не смотрите в конкретные запросы, то начните например https://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/ с фильтром на ваши основные объектынужно предупредить - что все рекомендации, выдаваемые такими скриптами, требуют тщательной проверки! Возможно, в системе уже есть подобные индексы, у которых всего лишь не хватает поля-другого в секции include. Слепо плодить индексы - не стОит, они - не бесплатные. Индексы нужно хранить, индексы нужно поддерживать в актуальном состоянии (и сейчас речь не за пользовательские манипуляции, а про "подкапотную" работу сервера, связанную с поддержанием целостности и актуальности индексов и с вязанной с ними информацией). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:16 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина АннаTaPaKесли не смотрите в конкретные запросы, то начните например https://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/ с фильтром на ваши основные объектынужно предупредить - что все рекомендации, выдаваемые такими скриптами, требуют тщательной проверки! Возможно, в системе уже есть подобные индексы, у которых всего лишь не хватает поля-другого в секции include. Слепо плодить индексы - не стОит, они - не бесплатные. Индексы нужно хранить, индексы нужно поддерживать в актуальном состоянии (и сейчас речь не за пользовательские манипуляции, а про "подкапотную" работу сервера, связанную с поддержанием целостности и актуальности индексов и с вязанной с ними информацией). чукча не читатель? авторPlease note, if you should not create all the missing indexes this script suggest. This is just for guidance. You should not create more than 5-10 indexes per table. Additionally, this script sometime does not give accurate information so use your common sense. авторИндексы нужно хранить кхм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:20 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaK, почитайте, с каким рвением и, практически, без проверок ТС пускает решения с форума в продакт (и его можно понять - база "тормозит", работа стоит, сроки срываются - тут нет времени на обдумывания и глубокое погружение во всё и сразу)... Вам станет понятно - что это не такое уж и бесполезное замечание.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:26 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, я к тому, что стОит делать акценты на очевидные (не для новичка), но критичные в ситуации ТС моменты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:27 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, охх сколько бессмысленного текста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:28 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaK, вас никто не заставляет его читать... ;) можете просто игнорировать посты с моим авторством... в конце концов - я же не вам помогаю ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 12:31 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Щукина АннаTaPaK, почитайте, с каким рвением и, практически, без проверок ТС пускает решения с форума в продакт (и его можно понять - база "тормозит", работа стоит, сроки срываются - тут нет времени на обдумывания и глубокое погружение во всё и сразу)... Вам станет понятно - что это не такое уж и бесполезное замечание.... на самом деле это действительно полезно - предупредить об использовании "опасных" советов/скриптов. Поэтому, в очередной раз, спасибо. А можно вопрос? А то запутались совсем... - Разностное резервное копирование (Differential backup) BACKUP DATABASE WITH DIFFERENTIAL; - Резервное копирование журнала транзакций (Transaction Log Backup) BACKUP LOG; это взаимоисключащие вещи или нет? То есть, если мы делаем разностное копирование надо ли нам делать второе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 14:33 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, если не хотите терять данные между разностными копими, то надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 14:47 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58А можно вопрос? А то запутались совсем... - Разностное резервное копирование (Differential backup) BACKUP DATABASE WITH DIFFERENTIAL; - Резервное копирование журнала транзакций (Transaction Log Backup) BACKUP LOG; это взаимоисключащие вещи или нет? То есть, если мы делаем разностное копирование надо ли нам делать второе? [SET "Captain Obvious" = ON] Гораздо правильнее будет сказать - "взаимодополняющие". 1) Полный бэкап, как и следует из его названия, представляет собой самодостаточную консистентную согласованную копию базы данных на определенный момент времени. В случае сбоя базы и при наличии только полного бэкапа - восстановиться можно, но лишь на состояние базы, соответствующее моменту выката бэкапа. Все изменении с момента выката копии и до краха базы - будут утеряны. 2) Разностный бэкап, как и алгебраическая "разность", представляет собой разницу между "уменьшаемым" и "вычитаемым" - то есть, по сути, это копия тех страниц, что претерпели изменения с момента последнего бэкапа. И так как это "разность", то сама по себе, без исходного состояния базы, он не представляет никакой ценности. Для восстановления с разностной копии требуется "уменьшаемое" - стартовая ПОЛНАЯ копия базы + все промежуточные "разности". Восстановление возможно лишь на момент выката любой из разностных копий. При наличии только разностной копии, без полной - восстановиться невозможно. 3) Копия транзакт-лога. Журнал, он и в африке - журнал. Содержит все ЛОГИРУЕМЫЕ операции, применяемые к базе. Сам по себе - малоинтересен и бесполезен. Но при наличии исходной полной копии и промежуточных копий журнала позволяет восстановиться на любой момент времени. В этом плане, если и решать вопрос резервного копирования, то предпочтительнее будет делать полное копирование (обязательно) + копии журнала (обязательно) + разностные копии (по желанию). Периодичность того или иного вида копирования - выбирать исходя из требований ко времени восстановления и допустимому "объему" потерянных данных в случае краха. Потому как, восстановиться с недельной давности полной копии + накат разностных копий за неделю + накат логов с момента последнего разностного бэкапа до момента краха, скорее всего, будет быстрее, чем восстановление с полной копии + накат всех логов за неделю. [SET "Captain Obvious" = OFF] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 16:08 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина АннаГораздо правильнее будет сказать - "взаимодополняющие"... Вооот! У вас очень просто и понятно написано, откуда вы цитируете если не секрет? И у меня несколько уточняющих вопросов: 1.если делать только полный бекап по понедельникам и каждый следующий день недели разностный, то что будет с лог файлом? Он будет расти и расти? Надо ли его как-то чистить? Вот этот момент мне не понятен. Или вообще я не должен беспокоится о его размере, сколько он будет весить, столько и должен, а попытки его уменьшить негативно отразятся на работе БД? 2. Если делать полный бекап по понедельникам, разностный ежедневно в 02:00, а бекап транзакт-лога в полдень. То как выглядит восстановление? Сначала восстанавливаем последний полный бекап, потом последний разностный и потом последний транзакт-лог? я думаю, надо мне проще создать тестовую бд и поиграться с различными вариантами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 16:22 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, усвойте уже простую истину: в полной модели восстановления единственно возможный способ сделать так что бы журнал транзакций не рос до бесконечности это сделать его бэкап {инструкция backup log} если вас не смущает что в какой то момент место на диске может закончится то можете бекапов лога не делать. (опять таки же на произвольный момент времени не восстановитесь не имея бекапа лога) вся информация есть в официальной справке: https://docs.microsoft.com/ru-ru/sql/relational-databases/backup-restore/transaction-log-backups-sql-server?view=sql-server-2017 https://docs.microsoft.com/ru-ru/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-2017 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 16:41 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, 1) В общем случае, транзакт-лог - это "бесконечная лента", размер которой ограничен либо заданным на уровне базы лимитом, либо (в отсутствии лимита) - доступным размером свободного места на диске. Как вам уже отвечали ранее другие ораторы - размер лога (занятое место внутри LDF-файла) уменьшается (штатно) только механизмом его резервного копирования. Ни полный бэкап, ни разностный бэкап - размер транзакт-лога не уменьшают. Есть "нештатный" способ уменьшения лога - перевод базы в режим восстановления "simple" с последующим шринком лога. Почему "нештаный"? Потому что есть ограничения на его применения. Если в базе используются вещи, требующие режима "full" или "bulk" (к примеру, лог-шиппинг), то перевод базы в "simple" "ломает" эти вещи и требует дальнейшей их повторной настройки. Более того - сервер будет всячески сопротивляться переводу в simple в этом случае. Поэтому, сначала придется "сломать" лог-шиппинг, после - перевести базу в симпл, урезать лог, а затем - всё вернуть в исходное состояние. Поверьте - по количеству телодвижений и потенциальных мест для факапа - это сильно сложнее, чем банальный бэкап транзакт-лога. 2) Если есть набор разных вариантов бэкапа, то и варианты восстановления будут разные. Можно восстановить полный бэкап и накатить на него все доступные копии журнала транзакций, без промежуточного наката разностных копий. Можно восстановиться с полной копии, "догнаться" всеми промежуточными разностными до какой-то точки, после чего "шлифануть" всё копией журнала. Тут главное помнить - движемся от большего к меньшему. Накатили полный - (опционно) накатили разностные - накатили журнал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 16:54 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Щукина АннаГораздо правильнее будет сказать - "взаимодополняющие"... Вооот! У вас очень просто и понятно написано, откуда вы цитируете если не секрет? И у меня несколько уточняющих вопросов: 1.если делать только полный бекап по понедельникам и каждый следующий день недели разностный, то что будет с лог файлом? Он будет расти и расти? Надо ли его как-то чистить? Вот этот момент мне не понятен. Или вообще я не должен беспокоится о его размере, сколько он будет весить, столько и должен, а попытки его уменьшить негативно отразятся на работе БД? 2. Если делать полный бекап по понедельникам, разностный ежедневно в 02:00, а бекап транзакт-лога в полдень. То как выглядит восстановление? Сначала восстанавливаем последний полный бекап, потом последний разностный и потом последний транзакт-лог? я думаю, надо мне проще создать тестовую бд и поиграться с различными вариантами. для ваших объёмов вы можете спокойно делать full раз в сутки + log (15- 60 минут) и хранить эту вакаханалию на -7 дней(или как душа желает). Дифференциальный вам не ясно зачем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 16:59 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Вооот! У вас очень просто и понятно написано, откуда вы цитируете если не секрет?Это - вольный, адаптированный и упрощенный пересказ документации ;). Хотя, некоторые считают, что это всего лишь "охх сколько бессмысленного текста..." :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 17:15 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Анна...+ все промежуточные "разности" .... + накат разностных копий за неделю У меня создалось впечатление, что вы путаете инкрементальные бэкапы с дифференциальными. Инкрементальные - содержат разницу между предыдущим инкрементальным (если он был) или полным (если не было) бэкапом и текущим состоянием. Дифференциальные всегда содержат разницу между полным бэкапом и текущим состоянием. В SQL Server есть только дифференциальные бэкапы, поэтому использовать необходимо один разностный бэкап - самый последний перед датой, на которую вы желаете восстановиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 18:24 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Minamoto, верное замечание... видимо, в голове "сварилась каша" из Oracle/PostgreSQL/MS SQL... В целом, понятно, что общие стратегии и подходы - везде если не одинаковы, то схожи... Нужно будет вспомнить СУБД-зависимые нюансы и разложить всё по полочкам... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:11 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaKдля ваших объёмов вы можете спокойно делать full раз в сутки + log (15- 60 минут) и хранить эту вакаханалию на -7 дней(или как душа желает). Дифференциальный вам не ясно зачем+1 Классический простой вариант, позволяет восстановить данные на любую секунду, прост в управлении. Диффами многие заморачиваются, видимо, из за названия, а зря. Они сложнее, и неоптимальны по месту хранения. Притом они не прощают ошибок - сделанным каким то внешним средством бакапом можно их запороть, и получить отсутствие бакапов в самый ответственный момент, причём узнать про это получится именно тогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:26 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
alexeyvgTaPaKдля ваших объёмов вы можете спокойно делать full раз в сутки + log (15- 60 минут) и хранить эту вакаханалию на -7 дней(или как душа желает). Дифференциальный вам не ясно зачем+1 Классический простой вариант, позволяет восстановить данные на любую секунду, прост в управлении. Диффами многие заморачиваются, видимо, из за названия, а зря. Они сложнее, и неоптимальны по месту хранения. Притом они не прощают ошибок - сделанным каким то внешним средством бакапом можно их запороть, и получить отсутствие бакапов в самый ответственный момент, причём узнать про это получится именно тогда. Таки позволю себе немного дополнить уважаемых коллег. Сам принцип создания индексов приводит к тому, что размер базы данных распухает - и распухает бэкап как самой базы, так и ее журнала транзакций (в общих чертах). Бэкап нужен не абы какой. А такой, чтобы можно было восстановиться на нужный момент НЕ прерывая бизнес. Перефразирую. Есть таблица 10 Гбайт с кластерным индексом (условно). На нее можно навесить 3 некластерных индекса еще по 5 Гбайт. Итого получаем вместо базы в 10 новый размер в 25 - в 2.5 раза больше предыдущего. Подобрали железо такое, что бэкап делается 10 минут, а восстанавливаем из него базу в случае ее повреждения - 8 минут. База обслуживает учетную систему, в которую вносятся первичные документы (ну или продажи/заказы по интернет-магазину). И главный директор говорит так - "12 минут простоя мы можем себе позволить, а свыше 12 - уже нет. Некуда будет вбивать первичные документы или факты, а на бумаге записывать и потом в базу вбивать невозможно никак". Отсюда вывод - делать бэкап 10 минут и разворачивать 8 минут можно. Делать 15 и разворачивать 12 минут - уже на грани фола. Поэтому один некластерный индекс в 5 Гб мы можем себе позволить и использовать его - а вот три индекса таки никак нельзя. Не соответствует целям ЗАКАЗЧИКА и по факту главного владельца и распорядителя всей этой базы. И поэтому когда разработчики говорят "а вот бы еще парочку кошерных индексов создать, чтобы 99% тяжелых отчетов ускорить раз в 10" - DBA отвечает - "стоп, извините, делайте асинхронную реплику, обвешивайте ее индексами, а на первичную реплику/базу я больше ничего не дам создать". Надеюсь, понятно разъяснил автору темы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 00:32 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPИ поэтому когда разработчики говорят "а вот бы еще парочку кошерных индексов создать, чтобы 99% тяжелых отчетов ускорить раз в 10" - DBA отвечает - "стоп, извините, делайте асинхронную реплику, обвешивайте ее индексами, а на первичную реплику/базу я больше ничего не дам создать".Тема создания индексов только на вторичной асинхронной реплике (на основной-то DBA запрещает!) раскрыта не полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 02:19 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичAndy_OLAPИ поэтому когда разработчики говорят "а вот бы еще парочку кошерных индексов создать, чтобы 99% тяжелых отчетов ускорить раз в 10" - DBA отвечает - "стоп, извините, делайте асинхронную реплику, обвешивайте ее индексами, а на первичную реплику/базу я больше ничего не дам создать".Тема создания индексов только на вторичной асинхронной реплике (на основной-то DBA запрещает!) раскрыта не полностью. Тема интересная. Берешь read-only реплику, навешиваешь на нее кучу индексов, все запросы на выборку направляешь туда, а на primary оставляешь одни кучи, ну или где надо добавляем класт. индекс и парочку обычных, чтоб update всю таблицу не сканил, и все, во красота та какая! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 07:05 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Есть другая практика - развернутая и проиндексированная "вчерашняя" база для формирования отчетов на втором сервере. Дабы не мешать оперативному вводу, и не тормозить им отчетность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 07:33 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Всем огромное спасибо за ответы, ссылки, рекомендации. Очень много почерпнул. Вчера сделал на основную базу полное (fullscan) обновление статистики, выполнилась за 1ч40м. Продолжаю расчищать базу данных, на это уйдёт ещё примерно 20 суток. И на бекапы скорее всего перейдём ночью полностью, днём несколько раз бекап лога транзакций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 10:39 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичAndy_OLAPИ поэтому когда разработчики говорят "а вот бы еще парочку кошерных индексов создать, чтобы 99% тяжелых отчетов ускорить раз в 10" - DBA отвечает - "стоп, извините, делайте асинхронную реплику, обвешивайте ее индексами, а на первичную реплику/базу я больше ничего не дам создать".Тема создания индексов только на вторичной асинхронной реплике (на основной-то DBA запрещает!) раскрыта не полностью. И я таки не стану эту тему раскрывать. Хотя бы потому, что процитировал злобного DBA, который хочет запугать наивных и глуповатых разработчиков. Разумеется, термин "асинхронная реплика" никак не связан с AlwaysOn и прочими механизмами самого MSSQL. Но поскольку Вы, Сережа, работаете в конторе довольно успешной и имеете под рукой таких же молодых и талантливых разработчиков - я Вам лично могу хороший рецепт дать. Берете исходники MSSQL Server, смотрите механизм накатки журнала на вторичную реплику, пишете сетевой драйвер, который перехватывает и модифицирует пакеты с нужными транзакциями - типа на первичной отыграла insert 1 строка into ненужная таблица, подменили на вторичной create нужный индекс на нужной таблице, а далее delete 1 строка from ненужная таблица на drop нужный индекс на нужной таблице. Если драйверы под Windows будет написать сложно - поставьте 2017-й на кошерную корпоративную сборку типа RedHat. Под Linux намного проще драйверы писать, API меняется относительно небыстро для нужного направления. А мои гвардейцы проследят, чтобы при всем стратегическом союзе между красношапочными и микромягкими индусы из Редмонда не переходили в Роли и ничего не испортили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 11:38 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Это он о чем вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 11:47 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
aleksrovЭто он о чем вообще? да как всегда, "горшочек варит" на износ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 11:59 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
хм....странно. Смотрите что получается: 1. работала база несколько лет, ничего не удаляли 2.стали расчищать базу 3.сразу появились запросы которые резко стали выполняться дольше таймаута(30 секунд) программы и она выдавала ошибку 4.сделали ВЧЕРА УТРОМ обновление статистики (БЕЗ fullscan) - запросы стали выполняться моментально 5.вечером сделали обновление статистики fullscan 6.ночью очередная расчистка базы 7.сейчас те запросы о которых пишу выше стали выполняться около 10 секунд, вместо моментального исполнения вчера. чуть позже снова сделаю обновление статистики(без fullscan) и проверю. Полагаю, что надо утром, после того как расчистка завершится делать обновление статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 12:04 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
дополню: Да, всё действительно оказалось именно так. Сделал Код: sql 1. для 3х основных таблиц, где удаляются/добавляются данные и всё снова стало моментально отрабатываться. Ещё подкорректировал свой скрипт, что бы выдавал более подробные логи по удалению данных, из смежных в разы больше удаляется данных, чем из основной таблицы. Вот сейчас прогнал на 1000 записях, удалил из основной 548, из смежных 1446+492+52 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 16:57 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Всем снова здравствуйте! Продолжаем заниматься БД, она потихонечку расчищается, мы отказались от разностных бекапов, перешли на ежедневный полный бекап+бекап лога транзакций. Логи: 29.05 выполнилось: проверка целостности (1,5ч) / полное резеврное копирование (15м) / резервное копирование журнала транзакций (39м) / очистка после обслуживания (1с) 30.05 выполнилось: проверка целостности (1,1ч) / полное резеврное копирование (14м) / резервное копирование журнала транзакций (2м) / очистка после обслуживания (0с) Уточню: 29.05 лог журнала транзакций делался впервые. сейчас mdf весит 65Гб, ldf 100Гб. Вопрос: почему не уменьшился файл лога? План настраивали через интерфейс MSSMS(не командами t-sql). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:06 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Всем снова здравствуйте! Продолжаем заниматься БД, она потихонечку расчищается, мы отказались от разностных бекапов, перешли на ежедневный полный бекап+бекап лога транзакций. Логи: 29.05 выполнилось: проверка целостности (1,5ч) / полное резеврное копирование (15м) / резервное копирование журнала транзакций (39м) / очистка после обслуживания (1с) 30.05 выполнилось: проверка целостности (1,1ч) / полное резеврное копирование (14м) / резервное копирование журнала транзакций (2м) / очистка после обслуживания (0с) Уточню: 29.05 лог журнала транзакций делался впервые. сейчас mdf весит 65Гб, ldf 100Гб. Вопрос: почему не уменьшился файл лога? План настраивали через интерфейс MSSMS(не командами t-sql). Потому что внутри файла теперь куча свободного места, которое будет повторно использовано. А уменьшение файла - это команда shrink. Которую делать НЕ нужно, поскольку журнал будет обратно расти и отнимать место у NTFS. И прирост его может быть медленным. А вот если ldf станет сильно расти свыше 100Гб - вот тогда пора бить тревогу и проверять, что бэкап лога транзакций уже не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:08 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, log_reuse_wait_desc в sys.databases для вашей базы что? ну и то что наш балабол пишет, не слушайте. Лог в 100 на 65 базы это много как не крути, хотя если место есть то можно и забить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:11 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58, где-то тут на форуме доводилось встречать доходчивую аналогию про шифоньер и вещи... оно как раз описывает вашу ситуацию с размером лог-файла... если найду - ссылку скину. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:25 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaKlog_reuse_wait_desc в sys.databases для вашей базы что? log_reuse_wait: 2 log_reuse_wait_desc: LOG_BACKUP Если он будет 100Гб (просто занял место и его использует) то всё ок, пусть будет такой. Обращу на это внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:27 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, нашлось... Не совсем про MS SQL и транзакт-лог, но суть та же. Только у вас: комната - это ваш диск, шкаф - файл транзакт-лога, вещи - его содержимое. Сделав бэкап, вы "увезли ненужные вещи из шкафа на дачу", а вам бы ещё и "шкаф" поменять на размером "поменьше"... Перед очередным бэкапом лога - посмотрите, сколько реально занято места внутри ldf-файла. После бэкапа сделайте размер файла чуть больше, чем было занято. Скорее всего, вам его и хватит... Ну или однократно уменьшите размер до минимума, который MS SQL Server согласится установить. А дальше - дайте файлу вырасти на сколько ему потребуется и больше его не трогайте, если, конечно, не будет аномально больших приростов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:35 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Анна, в очередной раз спасибо за такое подробнейшее разъяснение) вам учителем в школе/институте работать)))) Посмотрел ещё объём файла бекапа: от 29 числа(который самый первый бекап лога): 32Гб от 30 числа: 2.3Гб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:44 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58Посмотрел ещё объём файла бекапа: от 29 числа(который самый первый бекап лога): 32Гб от 30 числа: 2.3Гб Всё логично - в первый раз вы "вывезли из шкафа весь хлам", копившийся там с момента "установки шкафа". Во второй раз - только те "вещи", что стали ненужными с момента предыдущей (в вашем случае - так вообще первой) "ревизии содержимого шкафа". Скорее всего, что при "монотонной" нагрузке на сервер и регулярным бэкапам лога - размер бэкапа стабилизируется и будет сравнительно небольшим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 11:51 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58TaPaKlog_reuse_wait_desc в sys.databases для вашей базы что? log_reuse_wait: 2 log_reuse_wait_desc: LOG_BACKUP Если он будет 100Гб (просто занял место и его использует) то всё ок, пусть будет такой. Обращу на это внимание. на вскидку ничего плохого, сколько initial size на лог? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 12:25 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
TaPaKсколько initial size на лог? а как это посмотреть? по sp_Helpfile: size:103740416 KB maxsize: Unlimited growth: 10% в свойства БД - Файлы - Журнал: Начальный размер(МБ): 101309 Автоувеличение: с шагом по 10%, без ограничений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 14:21 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Serg58TaPaKсколько initial size на лог? в свойства БД - Файлы - Журнал: Начальный размер(МБ): 101309 файл лога у вас сейчас практически пустой, т.е. будет писать в свои 100ГБ без прироста, если чего чудовищного не предпримете. Так что если 100Гб не смущает то можете и забить, или снижаёте размер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2018, 14:49 |
|
||
|
подскажите по расчистке БД и последующему обслуживанию
|
|||
|---|---|---|---|
|
#18+
Очень вовремя темка. Выяснил, что наши "одмины" из СШП ни фига нормальный бекап не настроили на "моей" полу-продакшн базе. Дело еще осложняется тем, что старый bkp в 200 гиг, а места на диске осталось -190 :D Наверно есть параметр OVERWRITE или типа того, пойду курить доки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2018, 14:42 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1689625]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
136ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 439ms |

| 0 / 0 |
