Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Реиндексация 1С 8.3 на SQL

Реиндексация 1С 8.3 на SQL
Я
   Bkmzat
 
12.02.19 - 11:25
Добрый день.
Исходные данные:
1. 1с база размером боле 500 Гб на баз MS SQL 2012
2. Кол-во одновременно работающих круглосуточно пользователей - от 200 до 450.
3. Ресурсы сервера на котором лежит база:
Xeon-E5*2
Оперативная память LRDIMM 256 ГБ
Жёсткий диск - M2 - 2 Tb
Задание:
Раз в неделю запускается регламентное задание по реиндексации базы, но к сожалению постоянно, на разных этапах задание вываливается в ошибки:
"-1073548784" с сообщением об ошибке "Сбой выполнения запроса "sp_msforeachtable N'DBCC DBREINDEX (''?'')'" со следующей ошибкой: "Транзакция (идентификатор процесса 122) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно."

"-1073548784" с сообщением об ошибке "Сбой выполнения запроса "ALTER INDEX [_AccumRg14146_ByDims14584_TR] ON [dbo..." со следующей ошибкой: "Транзакция (идентификатор процесса 104) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно."

Для примера даны две ошики двух задач (первая ошибка задачи реиндексации командой "sp_msforeachtable N'DBCC DBREINDEX (''?'')'" , вторая ошибка задачи реиндексация стандарная "Задача перестроение индекса"" которая формируется автоматом)

И так далее в разных таблицах разные идентификаторы процесса
Вопрос:
Что можно предпринять для того, чтобы все же реиндексация проводилась?
Пользователей выгонять на время реиндексации нельзя.
 
 
   timurhv
 
1 - 12.02.19 - 11:39
(0) Вы скрипт писали или стандартный MSSQL используете? Редакция какая у SQL?
   los_hooliganos
 
2 - 12.02.19 - 11:41
"Что можно предпринять для того, чтобы все же реиндексация проводилась?"

Делать рукамии раз это 24*7

Перед реиндексом онлайн проанализировать все индексы на типы, что онлайн возможен
   Bkmzat
 
3 - 12.02.19 - 11:45
(1) Ну как я понимаю команда "sp_msforeachtable N'DBCC DBREINDEX (''?'')'" это по сути скрипт. Делал и командой и стандартный Т-SQL. Редакция у SQL - Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64)
   Bkmzat
 
4 - 12.02.19 - 11:47
(2) Руками 1С-ника или руками sql-ника?
   Йохохо
 
5 - 12.02.19 - 11:51
дбцц дбреиндекс депрекейтед вроде и про него явно написано что он оффлайновый. то есть минимум надо все переделать на альтер индекс
   ptiz
 
6 - 12.02.19 - 11:55
(0) Мы используем реиндекс отсюда:
http://www.gilev.ru/dbreindex/
   timurhv
 
7 - 12.02.19 - 11:59
(6) ONLINE=ON доступен не во всех редакциях
   ptiz
 
8 - 12.02.19 - 12:01
(7) Поэтому у нас OFF :)
   Bkmzat
 
9 - 13.02.19 - 15:12
(6) Ни один скрипт из этой темы у меня не запустился, а в скриптах я не силён. Если можете сказать что заменить там в скриптах чтобы заработало, то буду рад.
   Мыш
 
10 - 13.02.19 - 15:13
(9) При такой постановке вопроса радость не скоро посетит тебя.
 
 Рекламное место пустует
   ptiz
 
11 - 13.02.19 - 15:17
(9) Вот. Скопировал из нашей базы. Только MYDB поменяй на имя базы.

use MYDB
go



declare @minRows int

set @minRows = 10000


declare @reindexQuery nvarchar(max)


set @reindexQuery =

REPLACE(REPLACE(

cast(

(

select

'BEGIN TRY ALTER INDEX '+idx.name+' ON '+ sc.name+'.'+ t.name+

CASE

WHEN st.avg_fragmentation_in_percent > 30 THEN ' REBUILD WITH (ONLINE=OFF) END TRY BEGIN CATCH ALTER INDEX '+idx.name+' ON '+ sc.name+'.'+ t.name+ ' REBUILD WITH (ONLINE=OFF) END CATCH;'

ELSE ' REORGANIZE END TRY BEGIN CATCH END CATCH;'

END as query


from sys.dm_db_index_physical_stats( DB_ID(),NULL,NULL,NULL,NULL) st

join sys.tables t on (st.object_id=t.object_id)

join sys.schemas sc on (sc.schema_id=t.schema_id)

join sys.indexes idx on (t.object_id=idx.object_id and st.index_id=idx.index_id)

join sys.partitions p on (p.index_id=idx.index_id and p.object_id=idx.object_id)

where p.rows > @minRows and st.avg_fragmentation_in_percent > 30

order by st.avg_fragmentation_in_percent desc

FOR XML PATH(''), TYPE

) as nvarchar(max))

,'</query>',';

'),'<query>','')

print @reindexQuery


exec (@reindexQuery)
   Bkmzat
 
12 - 13.02.19 - 16:36
(11) Спасибо, попробую, в пятницу отпишусь.
   Bkmzat
 
13 - 18.02.19 - 08:20
Добрый день. Все вроде работает. Спасибо за помощь.
   Ivan5
 
14 - 16.03.19 - 17:08
Привет всем, подскажите пожалуйста поконкретнее где нужно поменять в строчки коде.
"Только MYDB поменяй на имя базы.
use MYDB 
go "
Я просто с MSSQL на вы, а проблема точно такая же.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует