Добрый день!
Ребята, поделитесь пож-та SQL запросами для оптимизации работы 1С.
Обновление статистик, дефрагментация индексов, реиндексация индексов и т.д.
Писать SQL запросы вообще не умею.
Буду очень благодарен!!!
Зачем в одном регламентном задании делать и дефрагментацию и полный ребилд индексов?
Точно подметили. )))
Добавлю, что после ребилда индексов не нужно собирать полную статистику, потому что по индексированным полям она уже собрана.
(16)
почитайте мануалы по MS SQL Server, а потом задавайте детские вопросы.
Судя по агрессивному тону, мануалов прочитано довольно немного. )))
(14) Мало того вы игнорируете вопросы/замечания, так еще и продолжаете давать неправильные советы. Как по вашему будут работать пользователи во время процедуры по ребилду индексов?
(19) странно, а вы не задумывались, что вот вы базу сжали, а завтра она снова такая же?
вариант уменьшения занимаемого пространства - Полная модель восстановления с бекапом как самой базы, так и лога транзакций....
а "резать" базу - так себе подход, только от экономии на рейдах
(7) сжатие базы нельзя проводить при работающих пользователях - а в остальном стандартный план обслуживания
кто интересовался этим вопросом идет выполнить "Выполнить T-SQL скрипт", потому что, например "Дефрагментация" скрипт в котором указывается процент выше которого дефрагментировать и выглядит лучше
dbcc proccache
sp_msforeachtable N'DBCC INDEXDEFRAG (База, ''?'')'
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
(7) копец. Сначала перестроение индекса (т.е. пересоздание), потом дефрагментация (только что созданного), потом сжатие базы (которое портит индексы вообще-то). Шедевр!
Вообще-то, сжатие файлов данных позволяет освободить неиспользуемое пространство путем перемещения страниц данных с конца файла в незанятое пространство ближе к началу файла, индексы при этом не затрагиваются. Умник...
(28)И зачем его освобождать, если оно опять потребуется и на выделение этого пространства опять потребуется расширение файла? Да еще и дефрагментация идет коту под хвост? Уж сколько пишут на профильных форумах про идиотизм регулярного шринка, а воз и ныне там...
USE ИмяБазы;
DECLARE @SQL NVARCHAR(MAX)
DECLARE cur CURSOR LOCAL READ_ONLY FORWARD_ONLY FOR
SEL ECT '
ALT ER INDEX [' + i.name + N'] ON [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ' +
CASE WHEN s.avg_fragmentation_in_percent > 30
THEN 'REBUILD WITH (SORT_IN_TEMPDB = ON'
-- Enterprise, Developer
+ CASE WHEN SERVERPROPERTY('EditionID') IN (1804890536, -2117995310)
THEN ', ON LINE = ON'
ELSE ''
END + ')'
ELSE 'REORGANIZE'
END + ';'
FR OM (
SEL ECT
s.[object_id]
, s.index_id
, avg_fragmentation_in_percent = MAX(s.avg_fragmentation_in_percent)
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') s --'' LIMITED
WH ERE s.page_count > 128 -- > 1 MB
AND s.index_id > 0 -- <> HEAP
AND s.avg_fragmentation_in_percent > 5
GROUP BY s.[object_id], s.index_id
) s
JOIN sys.indexes i WITH(NOLOCK) ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = s.[object_id]
OPEN cur
FETCH NEXT FR OM cur INTO @SQL
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC sys.sp_executesql @SQL
-- PRINT @SQL
FETCH NEXT FR OM cur INTO @SQL
END
CLOSE cur
DEALLOCATE cur