PDA

Показать полную графическую версию : MS SQL 2008 + 1C, переиндексация таблиц


art.andr
05-10-2012, 13:40
Добрый день!
Ситуация следующая:
имеется
- windows server 2008 enterprise SP2 32-разрядный. Xeon E5410 2.33GHz (2 процессора), 16 Gb оперативки
- MS SQL Server 2008
- 1С 8.2.15.301
- Дисковая полка с 4 HDD 7200 rpm в raid10, где лежат базы 1С

Все было прекрасно, но после перехода на 1С 8.2 начались дикие тормоза в 1С. Покопавшись в интернете, наткнулся на массу схожих проблем, но в большинстве случаев совет по решению один: накатываем win serv 2008 x64 и 64-битную версию 1С. В моем случае это неприменимо, т.к. денег на 64-битную 1С-ку не дают. Причем 1С тормозит не только на удаленных машинах, но и на сервере, что вызывает подозрения в том, что дело в MS SQL Server. Стал копать, наткнулся на некий процесс оптимизации таблиц в SQL:
- Переиндексация таблиц БД командой DBCC DBREINDEX (table_name)
- Дефрагментация индексов БД командой DBCC INDEXDEFRAG (db_name, table_name, index_name)

И далее пример:
CREATE PROCEDURE DBReindex AS
SET NOCOUNT ON
DECLARE @TableName char(32)
DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'
OPEN SysCur
FETCH NEXT FROM SysCur INTO @TableName
WHILE @@FETCH_STATUS=0 BEGIN
DBCC DBREINDEX (@TableName)
FETCH NEXT FROM SysCur INTO @TableName
END
CLOSE SysCur
DEALLOCATE SysCur

Т.к. я не силен в Transact-SQL просьба объяснить, что данный скрипт делает, и как его натравить на конкретную базу данных

__sa__nya
08-10-2012, 07:46
Покопавшись в интернете, наткнулся на массу схожих проблем, но в большинстве случаев совет по решению один: накатываем win serv 2008 x64 и 64-битную версию 1С. »
Ни разу не видел фактов, когда бы именно такое решение решало проблему производительности 1С в SQL.
Вам нужно в SQL Management Studio раскрыть БД 1С, хранимые процедуры в БД, создать новую, в теле процедуры удалить то что там будет по умолчанию написано, и вставить текст вашей процедуры. Эта процедура делает перестройку индексов для таблиц БД. Затем в SQL Management studio в SQL Server Agent создать задание, которое будет запускать на исполнение созданную процедуру. Так нужно сделать для каждой БД. Под рукой 2008 нет, поэтому пошагово расписать не могу. Но общий смысл такой.
Но то что вы прочитали - что нужно ставить 2008 R 2 + 64 bit 1С - это полная фигня. Такая связка, конечно влияет на производительность, но никогда это не было 100%-м решением проблем производительности БД.




© OSzone.net 2001-2012