powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перестроение индексов в T-SQL
51 сообщений из 51, показаны все 3 страниц
Перестроение индексов в T-SQL
    #39459608
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, прошу сильно не бить, а если и бить то не по почкам.
С sql я знаком дня этак 3, нужен скрипт перестроения индекса в T-SQL, кто может подсказать как сформировать правильный запрос?
Нужно что-то универсальное, т.к. серверов несколько, везде свой лес (свои настройки и структура бд), времени на изучение вопроса катастрофически нет. Ну и если не сильно универсальное то хотя бы в какую сторону копать, синтаксис команды ALTER INDEX (Transact-SQL) в силу отсутсвия знаний не дает ровным счетом ничего, просто из-за того, что нужно понимать всю суть всего что касается индексов, на что сейчас просто нет времени :(
Делаю обслуживание БД через sqlcmd с логированием результата и подтягиванием аларма в систему мониторинга, что бы быть в курсе где что не так с БД.

Так же хотел бы уточнить, верно ли я понимаю суть обслуживания БД SQL
1) проверка целостности БД
2) перестроение индекса
3) обновление статистики
4) очистка процедурного кэша
5) собственно сам бэкапинг базы
6) очистка журнала

p.s. ну и предвидя возможные вопросы, почему не делать все это через планы обслуживания - используем sql express :) ну и лично для меня в систему мониторинга так проще запросы подтягивать наверное
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459633
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanIvan48,
тут на форуме скрипты ребилда индексов регулярно бегают. Например
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459634
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459648
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же хотел бы уточнить, верно ли я понимаю суть обслуживания БД SQL
1) проверка целостности БД
2) перестроение индекса
3) обновление статистики
4) очистка процедурного кэша
5) собственно сам бэкапинг базы
6) очистка журналаВсе верно.
Еще возможен перенос на другой сервер, перенос некот. файлов БД на другой диск.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459652
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanIvan48,

а кэш вам чем мешает?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459655
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKIvanIvan48,

а кэш вам чем мешает?

У какого-то индуса прочитал.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459696
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав КолосовTaPaKIvanIvan48,

а кэш вам чем мешает?

У какого-то индуса прочитал.
именно так) но вроде как аргументирванно)

[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459697
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче вот тут он про очистку процедурного кэша, в предыдущем сообщении что-то ролик не заработал как должен был)

YouTube Video
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459699
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в ролике на 29ой минуте 17 секнде
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459709
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ALTER INDEX (Transact-SQL)
можно ли сделать универсальный запрос по перестройке индексов или тут нужно прям дла каждой отдельно взятой базы все подстраивать до мелочей? сори если задаю глупые вопросы :)
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459712
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanIvan48,

божественно... сразу после статистики... он мой кумир
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459713
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор https://ola.hallengren.com/downloads.html
ну я так понял это что-то типа процедуры, по проще варианта нет, чем портянка на 5 страница 10 шрифтом?!)
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459720
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

авторКороче вот тут он про очистку процедурного кэша, в предыдущем сообщении что-то ролик не заработал как должен был)
раз бложике написал, не вырубишь топором из пытливых юных умов
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459766
1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
Не поможет если после проверки булет выполнено резервное копирование БД.
Не очень нужна для GPT-партиций (вопрос спорный).
В БД нужно включить запись checksum.

Суть в том, что если будет ошибка, то база об этом узнает в момент когда будет выполнен доступ к повреждённым данным и запретит доступ к БД ВСЕМ. После обнаружения ошибки, с большой вероятностью придётся БД из бекапа восстанавливать. Это реальный опыт обслуживания 200 машин со скулями на торговых точках.

2) перестроение индекса
Какое перестроение?

rebuild + reorganize по стандартному алгоритму microsoft нужен если БД (filegroup) расположена на одном шпиндельном диске.

rebuild не нужен если БД (filegroup) расположена на СХД.
rebuild не нужен если БД (filegroup) расположена на SSD диске.

Если если БД (filegroup) расположена на SSD диске или на СХД:
reorganize не нужен если sys.dm_db_index_physical_stats page_count меньше 1000
reorganize не нужен если sys.dm_db_index_physical_stats avg_page_space_used_in_percent меньше 75%, для таблиц c page_count от 1000 страниц и до 1310720 страниц. Для больших таблиц нужно смотреть индивидуально.

3) обновление статистики
Лучше сделать, чем не сделать.
Не нужно если делался rebuild индекса.
Нужно если статистики в таблице устаревают раньше чем SQL их автоматически обновляет.
Нужно если в таблице были есть операции вставки/удаления/обновления.
Нужно с полным сканированием, если простое обновление не помогает.

На простейшем уровне опеки БД, достаточно смотреть на изменения в sys.dm_db_index_usage_stats, и если есть изменения в цифрах user_updates+system_updates, то обновлять.

4) очистка процедурного кэша
Не нужно. Я б даже сказал вредно.

5) собственно сам бэкапинг базы
Нужно, причём такое чтоб базу потом восстановить можно было за удоволетворительный срок. Нужно об этом договориться с бизнесом.

6) очистка журнала
shrink? -- SHRINK нужен до того размера при котором не произойдёт вырастание журнала в рабочее время.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459802
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
человек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.

RAID что, в курсе, какой порядок страниц индекса?
или знает, что каждой строке индекса должна соответствовать строка таблицы?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459806
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oчеловек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.

RAID что, в курсе, какой порядок страниц индекса?
или знает, что каждой строке индекса должна соответствовать строка таблицы?
главное что бы файлик был целый
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459848
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
человек_ниоткудаrebuild не нужен если БД (filegroup) расположена на СХД.
rebuild не нужен если БД (filegroup) расположена на SSD диске.Ой, какая милота. Ребилд индексов, расположенных на схд, нужен из соображений перфоманса для любых индексов с случайной вставкой ключей. Ребилд индексов на SSD нужен для экономии места на SSD (и оперативной памяти вместе с этим).
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459859
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.Спорно. Есть возможность поломать БД не касаясь работы оборудования.
Помницца, как-то пришлось прервать работу шринка большой базы. Закончилось suspect-ом. :)
А регулярная проверка действительно не нужна. Только при подозрениях.

Обновление статистики крупных нагруженных таблиц тоже время от времени нужно делать. В небизнес-время.
У нас вдруг почти колом стала большая база. В теч. неск. дней скорость упала до неприемлимой. Еле ворочалась. Оказалось в самую важную таблицу добавили поле и статистики грохнулись... После обновления ст-ки всего одной таблицы база снова ожила.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459864
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
человек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
Гм... Это как? Что означает "с проверкой целостности"?
RAID5/1/10 и т.д.?
Так они могут писать "мимо" - только в путь! Какая-нибудь бяка в драйвере контроллера, и всё, понеслось!
(Дада. Я люблю сервера DEPO, куда деваться то).
человек_ниоткуда Не поможет если после проверки булет выполнено резервное копирование БД.
Ну, первым шагом джоба DBCC CHECKDB, вторым (если не обломилось на первом шаге) - полный бэкап (ну, например).
Если база, скажем так, сотня-другая гигабайт - то всё за вполне себе небольшое время завершается.
Почему нет то?
человек_ниоткуда Не очень нужна для GPT-партиций (вопрос спорный).

Почему? Объясните, правда не понимаю!
человек_ниоткуда В БД нужно включить запись checksum.

Ну, это понятно...
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459907
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggsterчеловек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
...
RAID5/1/10 и т.д.?
Какая-нибудь бяка в драйвере контроллера, и всё, понеслось!
...
у нас такой случай был, бэкапилось все на тот же диск, думали что raid 10 это что-то вечное, из гранита, в итоге умерло все) после этого рейдам я доверяю еще меньше чем раньше.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459910
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы мне глупому нубу скажите, копать или не копать?)
Я так понял переиндексацию делать не стоит, базы максимум по 30-40 гиг и не сильно нагружены, т.е. изменения не прямо вот быстрые какие-то, просто пополняют потиху)
Что выполнять, что не выполнять? А то тут холивар разгорается :D
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459922
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
Бэкап всех баз раз в сутки или за сколько времени не жалко данные потерять
И dbcc checkdb всем базам раз в неделю.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459937
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) проверяю целостность БД
2) обновляю статистику
3) делаю шринк
4) бэкаплю
так?

еще по t-sql
тут все верно по скриптам или как-то не так? а то sql сказал что он мол не отвечает за последствия предоставленного им кода)))

1) проверяю целостность БД
/chesk.sql
USE [mytest001]
GO
DBCC CHECKDB(N'mytest001') WITH NO_INFOMSGS

2) обновляю статистику
/stat.sql
use [mybase123]
GO
UPDATE STATISTICS [dbo].[Table_1]
WITH FULLSCAN

3)
/shrink.sql
USE [mytest001]
GO
DBCC SHRINKDATABASE (mytest001, TRUNCATEONLY)

4)
/backup.sql
BACKUP DATABASE [mybase123] TO DISK = N'C:\script\BASE\mybase' WITH RETAINDAYS = 3, NOFORMAT, INIT, NAME = N'mybase123_backup_2017_05_24_234900_4553030', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'mybase123' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'mybase123' )
if @backupSetId is null begin raiserror(N'Ошибка верификации. Сведения о резервном копировании для базы данных "mybase123" не найдены.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'C:\script\BASE\mybase' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND

так?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39459950
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanIvan48,

индусы занятные люди, если их методику программирования спроецировать на повседневность, то они штаны, например, снимали бы, разрезая их по боковому шву, а при одевании - сшивали. Выглядит правильно, в общем-то, и свежо.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460000
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторsp_updatestats выполняет инструкцию UPDATE STATISTICS, указывая ключевое слово ALL, на всех пользовательских и внутренних таблиц в базе данных. sp_updatestats выводит сообщения о ходе своего выполнения. По завершении обновления выдается отчет о том, что обновление статистики произведено для всех таблиц.

Процедура sp_updatestats обновляет статистику по отключенным некластеризованным индексам и не обновляет статистику по отключенным кластеризованным индексам.

Для дисковых таблиц sp_updatestats обновляет только статистику, требующую обновления, основываясь на modification_counter сведения в sys.dm_db_stats_properties представления каталога, таким образом предотвращаются ненужные обновления статистики по неизменным строкам. Статистика в таблицах, оптимизированных для памяти всегда обновляется при выполнении sp_updatestats. Поэтому не следует вызывать sp_updatestats чаще, чем необходимо.

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

Для баз данных с уровнем совместимости ниже 90 при выполнении процедуры sp_updatestats не сохраняет последнее значение параметра NORECOMPUTE для заданной статистики. Для баз данных с уровнем совместимости 90 или выше sp_updatestats сохраняет последнее значение параметра NORECOMPUTE для заданной статистики. Дополнительные сведения об отключении и повторном включении обновления статистики см. в разделе статистики.


я так понял, что просто по дефолту UPDATE STATISTICS делается только для строго указанных таблиц и прочего, когда их много, то видимо замудохаешься их переписывать, для удоства сделали процедуру sp_updatestats, которая автоматом все подтягивает, лучше использовать ее или все таки руками все шкрябать в скрипт?

рабочий вариант скрипта:
авторUSE [mytest001]
GO
EXEC sp_updatestats

лог после выполнения:
авторКонтекст базы данных изменен на "mytest001".
Обновление [sys].[sqlagent_jobs]
[sqlagent_jobs_clust], обновление не обязательно...
[sqlagent_jobs_nc1_name], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[sqlagent_jobsteps]
[sqlagent_jobsteps_clust], обновление не обязательно...
[sqlagent_jobsteps_nc1], обновление не обязательно...
[sqlagent_jobsteps_nc2], обновление не обязательно...
Статистика по индексам 0 обновлена, 3 не потребовало обновления.
Обновление [sys].[sqlagent_job_history]
[sqlagent_job_history_clust], обновление не обязательно...
[sqlagent_job_history_nc1], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[sqlagent_jobsteps_logs]
[sqlagent_jobsteps_logs_nc1], обновление не обязательно...
Статистика по индексам 0 обновлена, 1 не потребовало обновления.
Обновление [dbo].[Table_1]
[PK_Table_1], обновление не обязательно...
Статистика по индексам 0 обновлена, 1 не потребовало обновления.
Обновление [dbo].[sysdiagrams]
[PK__sysdiagr__C2B05B61256235CA], обновление не обязательно...
[UK_principal_name], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[queue_messages_1977058079]
[queue_clustered_index], обновление не обязательно...
[queue_secondary_index], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[queue_messages_2009058193]
[queue_clustered_index], обновление не обязательно...
[queue_secondary_index], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[queue_messages_2041058307]
[queue_clustered_index], обновление не обязательно...
[queue_secondary_index], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[filestream_tombstone_2073058421]
[FSTSClusIdx], обновление не обязательно...
[FSTSNCIdx], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[syscommittab]
[ci_commit_ts], обновление не обязательно...
[si_xdes_id], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[filetable_updates_2105058535]
[FFtUpdateIdx], обновление не обязательно...
Статистика по индексам 0 обновлена, 1 не потребовало обновления.
Статистика по всем таблицам обновлена.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460008
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще вопрос по шринку, есть ли смысл его включать в обслуживание, если майкрософт не советует это делать, т.е. ну понятно, если прям критический вопрос в плане места, то придется в любом случае, но вот что мелкософты пишут:
авторРекомендации
Обратите внимание на следующие сведения при планировании сжатия базы данных.
Наибольший эффект от операции сжатия достигается при ее применении после операции, создающей много неиспользуемого пространства, например после усечения таблицы или удаления таблицы.
Большинству баз данных требуется некоторое свободное пространство для выполнения обычных ежедневных операций. Если сжатие базы данных производится регулярно, но она снова увеличивается в размерах, это означает, что место, освобожденное при сжатии, необходимо для нормальной работы. В таких случаях повторное сжатие базы данных бессмысленно.
Операция сжатия не избавляет от фрагментации индексов в базе данных и обычно приводит к еще более сильной фрагментации. Это еще одна причина, по которой не стоит выполнять регулярное сжатие базы данных.
Не следует устанавливать параметр базы данных AUTO_SHRINK в значение ON без достаточных на то оснований.
поэтому вот даже хз) индексы типа сильнее фрагментируются.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460019
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо делать шринк.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460038
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanIvan48И еще вопрос по шринку, есть ли смысл его включать в обслуживание, если майкрософт не советует это делать, т.е. ну понятно, если прям критический вопрос в плане места, то придется в любом случае, но вот что мелкософты пишут:Всё правильно пишут, не шринкуйте. Только как аварийная команда, при особых ситуациях, когда из за неисправности занято слишком много места.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460240
uaggsterчеловек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
Гм... Это как? Что означает "с проверкой целостности"?
RAID5/1/10 и т.д.?
Так они могут писать "мимо" - только в путь! Какая-нибудь бяка в драйвере контроллера, и всё, понеслось!
(Дада. Я люблю сервера DEPO, куда деваться то).
человек_ниоткуда Не поможет если после проверки булет выполнено резервное копирование БД.
Ну, первым шагом джоба DBCC CHECKDB, вторым (если не обломилось на первом шаге) - полный бэкап (ну, например).
Если база, скажем так, сотня-другая гигабайт - то всё за вполне себе небольшое время завершается.
Почему нет то?

Законно...
Мой косяк что бекап после. Сначала бекап, потом checkdb. Ибо лучше сделать бекап и ждать CHECKDB если всё упадёт до бекапа, то будет нехорошо.
Если в БД случился косяк, то случиться он в момент, когда запись произведена. А выявится, когда страница данных (с косяком) будет прочитана. Я, признаться, не помню как работает механизм checksum страницы: конкретно не знаю проверяет SQL checksum в момент сброса буффера на диск или нет. Ибо если проверяет, то получается, в момент когда произойдёт ошибка - база и так в suspend уйдёт; получается что вообще нет смысла checkdb делать, за исключением случая когда диск такой конченый, что буквально сыпется от вращения блина. А если не проверяет (что я считаю вполне правильно), то CHECKDB нужен перед удалением последнего исторического бекапа, т.е. намного реже чем сам бекап. И он вообще не нужен если бекапы проверяются тестовыми ресторами.
CHECKDB это полный скан всей базы, т.е. как-никак да диск это напрягает - и ресурс его сокращает.

тогда так:
Можно, если есть время на выполнение этой процедуры. Иначе менять дисковую систему на обеспечивающую большую надёжность.


uaggsterчеловек_ниоткуда Не очень нужна для GPT-партиций (вопрос спорный).

Почему? Объясните, правда не понимаю!

GPT как я понял по описанию в себе имеет механизм контроля целостности данных. Т.е. она поймёт, если в неё что-то нитак записалось сама. Но, опять же, вопрос спорный - мож я что-то в мануале перекурил ;) буду рад достоверной инфе, если неправ.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460251
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
человек_ниоткудаЕсли в БД случился косяк, то случиться он в момент, когда запись произведена. А выявится, когда страница данных (с косяком) будет прочитана. Я, признаться, не помню как работает механизм checksum страницы: конкретно не знаю проверяет SQL checksum в момент сброса буффера на диск или нет. Ибо если проверяет, то получается, в момент когда произойдёт ошибка - база и так в suspend уйдёт; получается что вообще нет смысла checkdb делать, за исключением случая когда диск такой конченый, что буквально сыпется от вращения блина. А если не проверяет (что я считаю вполне правильно), то CHECKDB нужен перед удалением последнего исторического бекапа, т.е. намного реже чем сам бекап. И он вообще не нужен если бекапы проверяются тестовыми ресторами.

каша полнейшая.
checksum/tornpage проверяется при чтении, при записи он считается и записывается.
поэтому страницы с битыми checksum-ами выявляются при чтении.
только вот чекдб это отнюдь не "просто чтение всего".
вам уже намекали, что база это не просто куча правильно или неправильно записанных байтов,
это хранилище тех же индексов, где вообще-то каждая страница "знает свое место",
за какой страницей она идет логически, и это, например, не интересует никакой RAID.
и даже если вы делаете бэкапы с опцией checksum, и потом успешно из них восстанавливаетесь,
это нисколько не гарантия небитости базы.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460259
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
A SQL Server DBA myth a day: (27/30) use BACKUP WITH CHECKSUM to replace DBCC CHECKDB

RandalLastly, and most insidiously, relying solely on BACKUP … WITH CHECKSUM leaves you susceptible to in-memory corruptions. If a bad memory chip, badly-written XP, or other rogue Windows process corrupts a SQL Server data file page in memory, and then it gets written to disk, you've got a corrupt page with a valid checksum – and nothing will catch that except DBCC CHECKDB.

Bottom line – you can't avoid running consistency checks. If you're having trouble, take a look at my old blog post CHECKDB From Every Angle: Consistency Checking Options for a VLDB.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460294
IvanIvan481) проверяю целостность БД
Если хочешь и есть время.

IvanIvan482) обновляю статистику
ДА! И да: делай sp_updatestats. Для начала этого достаточно. Раз в два часа.

IvanIvan483) делаю шринк
Только transaction log (ldf).

IvanIvan484) бэкаплю
так?

Нет! :) Бекапишь сразу после CHECKDB. Или CHECKDB перед бекапом.
Т.е. (2) - (3) - (1) - (4) или (1) - (4) - (2) - (3)
IvanIvan48еще по t-sql
тут все верно по скриптам или как-то не так? а то sql сказал что он мол не отвечает за последствия предоставленного им кода)))

IvanIvan481) проверяю целостность БД
/chesk.sql
USE [mytest001]
GO
DBCC CHECKDB(N'mytest001') WITH NO_INFOMSGS

Норм

IvanIvan482) обновляю статистику
/stat.sql
use [mybase123]
GO
UPDATE STATISTICS [dbo].[Table_1]
WITH FULLSCAN

Не совсем. Делай через sp_updatestats раз в два часа.


IvanIvan483)
/shrink.sql
USE [mytest001]
GO
DBCC SHRINKDATABASE (mytest001, TRUNCATEONLY)

НЕТ!
Делай только :
Код: sql
1.
2.
USE [mytest001];
DBCC SHRINKFILE (2 , 1000);



И проверь чтоб лог был только один.
Код: sql
1.
2.
3.
4.
USE [mytest001];
SELECT	df.[file_id], df.type_desc, df.name
FROM	sys.database_files AS df
WHERE	df.type_desc = 'LOG'





IvanIvan484)
/backup.sql
BACKUP DATABASE [mybase123] TO DISK = N'C:\script\BASE\mybase' WITH RETAINDAYS = 3, NOFORMAT, INIT, NAME = N'mybase123_backup_2017_05_24_234900_4553030', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'mybase123' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'mybase123' )
if @backupSetId is null begin raiserror(N'Ошибка верификации. Сведения о резервном копировании для базы данных "mybase123" не найдены.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'C:\script\BASE\mybase' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND

"RESTORE VERIFYONLY" делает почти ничего... хорошо хорошо, он делает проверку, но она не гарантирует что БД из бекапа восстановится... И раз уж делаете DBCC CHECKDB - то смысла в этом ещё меньше. Я считаю что уж лучше делать полный рестор в новую бд - и если он не упал, то всё ок.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460308
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
человек_ниоткудаIvanIvan481) проверяю целостность БД
Если хочешь и есть время.

IvanIvan482) обновляю статистику
ДА! И да: делай sp_updatestats. Для начала этого достаточно. Раз в два часа.


что ж за фигня-то такая.
проверять базу раз в неделю надо,
а не хочу-не хочу.
не крякнет сервер, что за объемы на экспрессе, проверит, не треснет.

а вот какого черта ему каждые 2 часа статистику обновлять?
он что-то писал об обновлении данных?
какие-то неправильные оценки у него?
у нас, например, раз в сутки ночью идет перезаливка данных, и все.
дальше только чтение.
но ведь нет, особо одаренные ДБА бэкапят формально ридонли базы каждые 3 часа.
а вот еще бы статистики обновляли, когда это нафиг не надо...
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460329
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
человек_ниоткуда,

Извините конечно, но вы столько ахинеи насоветовали.
ТС надо по пунктам пройтись и понять для чего все это и как часто определнные пункты нужны для именно ЕГО системы.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460335
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
aleksrovчеловек_ниоткуда,

Извините конечно, но вы столько ахинеи насоветовали.
ТС надо по пунктам пройтись и понять для чего все это и как часто определнные пункты нужны для именно ЕГО системы.
а я про что. чекать базы и бэкапы делать надо всегда
(второе разумеется чаще, чем первое)
а вот все остальное по мере надобности,
и лучше не трогать, когда не в состоянии понять, надо оно или нет.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460362
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
человек_ниоткуда,

Не НАДО советовать шринковать лог. Потому что при его приращении будет полная ж..па: если малыми кусками прирастать, будет куча виртуальных файлов лога, если большими -- все упарятся ждать, пока кусок будет забит нолями. Нахрена вообще сервер заставлять делать бесполезную работу сначала по расширению файла, потом по его сжатию?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460387
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
Гавриленко Сергей АлексеевичНахрена вообще сервер заставлять делать бесполезную работу сначала по расширению файла, потом по его сжатию?
как зачем, всем будет, чем заняться: и серверу, и ДБА
у нас новый дба каждый день по несколько раз шринкует темпдб.
и днем ему это удается: заливка у нас ночная, и тогда же темпдб выходит на свой привычный уровень в 86Гб
(вообще под ней диск 100Гб, вылезти из берегов невозможно)
я все понимаю, днем, как кто-то начинает спиллить, можно отловить на свежеурезанном темпдб,
но я вас уверяю, он это делает совершенно из иных соображений.
в результате каждый божий день (вернее, ночь) получаем (свежая копия экрана)
не надоест же ему!!!
второй месяц админит, все никак не доходит до него, когда и почему темпдб разносит.
а урезает он до гига(!)
а темпдб обратно 86 набирает.
нескончаемая игра "кто кого"
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460470
Гавриленко Сергей Алексеевиччеловек_ниоткуда,

Не НАДО советовать шринковать лог. Потому что при его приращении будет полная ж..па:
человек_ниоткуда6) очистка журнала
shrink? -- SHRINK нужен до того размера при котором не произойдёт вырастание журнала в рабочее время.

Гавриленко Сергей АлексеевичНахрена вообще сервер заставлять делать бесполезную работу сначала по расширению файла, потом по его сжатию?
Ну идёт maintenance ночной - лог вырастает; начался день - лог маленький, и работает с меньшими latency. Не во всех случаях это даёт прирост производительности - но хуже от этого точно не будет. Если вы способны пообщаться без эмоций, я готов рассказать поподробнее об этом в отдельной теме.
Топикастеру надо организовать maintenance, а не в спецы по SQL-у записываться вообщето. Я даю рекомендации общего пользования.

Кстати помниться кто-то из крутых блоггеров рекомендовал вот это: https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html Это скрипт обновления статистик и перестройки индексов в одном флаконе. IvanIvan48 тебе для пункта (2) это.

[quot o-o]человек_ниоткудаЕсли в БД случился косяк, то случиться он в момент, когда запись произведена. А выявится, когда страница данных (с косяком) будет прочитана. CHECKDB нужен перед удалением последнего исторического бекапа, т.е. намного реже чем сам бекап. И он вообще не нужен если бекапы проверяются тестовыми ресторами.

Так понятнее, братюнь?

o-oкаша полнейшая.
Эээй... Без нервов, дружище. Всё хорошо.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460476
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
человек_ниоткудалог маленький, и работает с меньшими latencyА как latency массива зависит от размера файла (о котором массив вообще не в курсе)?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460482
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевиччеловек_ниоткудалог маленький, и работает с меньшими latencyА как latency массива зависит от размера файла (о котором массив вообще не в курсе)?
Теоретически - никак не зависит.

Могут быть нюансы, если места на диске совсем не осталось, <10% от емкости.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460520
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
[quot человек_ниоткуда]

o-oчеловек_ниоткудаЕсли в БД случился косяк, то случиться он в момент, когда запись произведена. А выявится, когда страница данных (с косяком) будет прочитана. CHECKDB нужен перед удалением последнего исторического бекапа, т.е. намного реже чем сам бекап. И он вообще не нужен если бекапы проверяются тестовыми ресторами.

Так понятнее, братюнь?

o-oкаша полнейшая.
Эээй... Без нервов, дружище. Всё хорошо.
мы, кажется, на брудершафт не пили, товарищ?
если нужен братюня для выпивания смузи и обсуждения собственных фантазий,
вон есть жаждущий и страждущий sql_user2.
тоже любитель альтернативного администрирования.

так что там мне должно быть понятнее?
что база может быть попорчена при идеальных CHECKSUM?
в памяти попорчена, но записана идеально на диск?
см. пост выше, с цитатой и источником.
у меня куда больше доверия к человеку, написавшему код dbcc checkdb,
чем к братюне, не помнящему, когда же проверяется checksum.
и в десятый раз, чекдб это куда больше, чем with physical_only.

----
а про кашу, так я вещи своими именами называю.
особо нервные могут не читать, чтобы не перевозбуждаться
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460615
IvanIvan48
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со шринком все понятно, журнал раз в сутки, базу раз в месяц и то, в крайнем случае. По остальному тоже понятно. Честно говоря я всегда думал что проверка базы делает в режиме read-only, у меня все обслуживаение и бэкапинг будет исключительно ночью.
По какой причине сначало надо бэкапить, а потом уже проверять базу? Просто ну для меня это не логично) при проверке происходит запись в эту же базу что ли?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460635
MSSQLBug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
человек_ниоткудаНу идёт maintenance ночной - лог вырастает; начался день - лог маленький, и работает с меньшими latency. Не во всех случаях это даёт прирост производительности - но хуже от этого точно не будет. Если вы способны пообщаться без эмоций, я готов рассказать поподробнее об этом в отдельной теме.
Топикастеру надо организовать maintenance, а не в спецы по SQL-у записываться вообщето. Я даю рекомендации общего пользования.


Прямо навеяло: http://www.sql.ru/forum/1134324/kogda-shrink-loga-deystvitelno-pomogaet
Вы случайно не мой знакомый DBA из этой темы? Или он Вас "обучал"? ;)
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460649
o-o... пропущено
особо нервные могут не читать, чтобы не перевозбуждаться
Отлично выступили, молодой человек.

На разумную часть вашей тирады, посоветовался с коллегами, почитал. brent советует делать checkdb, коллеги в целом склоняются к мнению, что на хорошем железе это не нужно.
Стоит подумать, спасибо.

Всем возражающим - за 10 лет ниразу не видел проблем которые решает checkdb на хорошем железе. Если вы видели, хорошо, буду иметь ввиду. Попробую свои проды проверить на досуге.

IvanIvan48По какой причине сначало надо бэкапить, а потом уже проверять базу? Просто ну для меня это не логично) при проверке происходит запись в эту же базу что ли?
Бекапить нужно чтоб был бекап! Чтоб если железо упадёт пока делается checkdb - можно было восстановиться.
В идеале нужно сделать бекап >> развернуть его не тестовой среде >> сделать полученной БД (на тесте) checkdb.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #39460658
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
человек_ниоткудаВсем возражающим - за 10 лет ниразу не видел проблем которые решает checkdb на хорошем железе.Во-первых, понятие "хорошести" железа весьмо растяжимо. Во-вторых, при хорошем железе, может быть плохое его обслуживание: забыли прошивку обновить, дрова не те поставили, словили синьку и приплыли. В-третьих, при любом железе DBCC CHECKDB очень хорошо решает свою основную задачу сигнализировать о проблемах с базой.

По поводу делать или нет, мое мнени такое: если есть физическая возможность делать его на регулярной основе, лучше делать. Насколько нужно упарываться в регулярность запуска CHECKDB при росте размера базы, надо смотреть в каждой конретной ситуации в зависимости от "хорошести" железа, глубины хранения бэкапов и прочих бизнес-нужд.

А вот шринк на регулярной основе делать НЕ НАДО (кроме некоторых маргинальных случаев, связанных с использованием массивов разной производительности).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Перестроение индексов в T-SQL
    #40007850
Юзер9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спрошу тут, чтобы не плодить темы.
Нашёл скрипт для адаптивной дефрагментации. Проверил, создавая запрос к базе. Затем записал в задание, он (скрипт) при работе выдал ошибку:
"Сообщение 1934, степень серьезности 16, состояние 1, строка 1: Ошибка ALTER INDEX. Следующие параметры SET содержат неверные значения: "QUOTED_IDENTIFIER". Убедитесь, что параметры SET содержат значения, подходящие для использования с индексированные представления, индексы для вычисляемых столбцов, отфильтрованные индексы и/или уведомления о запросах, методы типов данных XML и/или операции с пространственными индексами. [SQLSTATE 42000]"
Где я ошибся?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #40007870
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзер9 Где я ошибся?Не тот скрипт скачал. Нужный был в третьем сообщении этого топика 20511363
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #40007891
Юзер9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я брал совсем другой.
Если брать IndexOptimize.sql:
"Модуль "IndexOptimize" имеет зависимость от отсутствующего объекта "dbo.CommandExecute". Модуль будет создан, однако не сможет нормально работать, пока этот объект не существует."

Тоже не хочет работать даже в форме запроса. Мне нужен только этот модуль, отдельно.
Прикрутить я смогу. Что из него вырезать?
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #40007897
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы из тех кто ставит не читая инструкции (небось сразу на прод сервер)
На странице https://ola.hallengren.com/downloads.html третий абзац
Note that you always need CommandExecute; DatabaseBackup, DatabaseIntegrityCheck, and IndexOptimize are using it.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #40007942
Юзер9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я из юзеров, не знающих английский.
...
Рейтинг: 0 / 0
Перестроение индексов в T-SQL
    #40007946
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзер9
Я из юзеров, не знающих английский.

Воспользуйтесь переводчиком.
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перестроение индексов в T-SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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