11.01.2010, 09:32 | #1 |
Участник
|
Косяк с системными таблицами SQL
Перестали апдейтиться записи на некоторых таблицах, т.е. таблицы перестали выбираться для обновления, и как следствие блокировка таблиц и зависание пользователей. Попытался решить проблему рестартом AOS-a, эффекта никакого. После рестарта служб SQL, автоматически запустилась процедура восстановления базы, после которой всё запустилось нормально.
В логах сервера ничего путного нет. Помоготе найти причину, и какие проффилактические процедуры можно проводить с MS SQL, чтоб избежать подобные ситуации в будущемю Сам грешу на системные таблицы SQL. Axapta 3.0 sp 4 kr2 MS SQL 2000 sp3
__________________
While (!Life.EOF) { You.Money++; You.Girls.Add( new Girl( 90, 60, 90 ) ); BeHappy(); } |
|
11.01.2010, 09:53 | #2 |
Member
|
Как вариант можно пробовать перестроить индексы БД. Средствами Аксапты. Изредка они в БД разрушаются.
__________________
С уважением, glibs® |
|
11.01.2010, 10:22 | #3 |
Участник
|
Цитата:
Как вариант можно пробовать перестроить индексы БД. Средствами Аксапты. Изредка они в БД разрушаются.
__________________
While (!Life.EOF) { You.Money++; You.Girls.Add( new Girl( 90, 60, 90 ) ); BeHappy(); } |
|
11.01.2010, 10:23 | #4 |
Участник
|
А почему sp4 не поставили? Там много чего исправлено было. И после sp4 чего-то было еще.
http://www.krell-software.com/mssql-...asp?version=80 "Ну и вопросы у Вас! Сказала БД и повисла!" Я когда-то пользовал такой скрипт - X++: set nocount on DECLARE @tablename VARCHAR (128) DECLARE @indexname VARCHAR (128) declare INDEXES cursor for SELECT O.name,I.name FROM sysobjects O,sysindexes I WHERE I.indid>=0 AND I.indid<255 AND I.id=O.id AND type in ('U','V') AND (INDEXPROPERTY(I.id,I.name,'IsStatistics') <> 1) AND (INDEXPROPERTY(I.id,I.name,'IsAutoStatistics') <> 1) AND (INDEXPROPERTY(I.id,I.name,'IsHypothetical') <> 1) AND O.type!='S' AND I.indid=1 ORDER BY 1, 2 OPEN INDEXES FETCH NEXT FROM INDEXES INTO @tablename, @indexname WHILE @@FETCH_STATUS = 0 BEGIN EXEC ('DBCC DBREINDEX (''' + @tablename + ''',''' + @indexname + ''',70) WITH NO_INFOMSGS') print @indexname FETCH NEXT FROM INDEXES INTO @tablename, @indexname END CLOSE INDEXES DEALLOCATE INDEXES Последний раз редактировалось egorych; 11.01.2010 в 10:28. |
|
11.01.2010, 10:25 | #5 |
Участник
|
Цитата:
А почему sp4 не поставили? Там много чего исправлено было. И после sp4 чего-то было еще.
__________________
While (!Life.EOF) { You.Money++; You.Girls.Add( new Girl( 90, 60, 90 ) ); BeHappy(); } |
|
11.01.2010, 10:44 | #6 |
Member
|
Цитата:
Сообщение от monter
А как это можно сделать??
Индексы\Реиндексация Реиндексация БД является регламентной процедурой на неразгильдяйских инсталляциях. Также регулярно необходимо запускать реиндексацию приложения, обновление статистик БД, очистку данных в таблицах различных журналов (там, где это можно и нужно), сжатие (shrink) БД. Реже но тоже нужно запускать глобальную компиляцию приложения. Опционально — перекрестные ссылки. Вопрос о том откуда запускаются регламентные процедуры в вашем случае несколько смущает.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: wojzeh (1). |
11.01.2010, 11:04 | #7 |
Участник
|
Цитата:
Вопрос о том откуда запускаются регламентные процедуры в вашем случае несколько смущает.
__________________
While (!Life.EOF) { You.Money++; You.Girls.Add( new Girl( 90, 60, 90 ) ); BeHappy(); } |
|
14.04.2010, 21:23 | #8 |
Участник
|
Цитата:
Реиндексация БД является регламентной процедурой на неразгильдяйских инсталляциях. Также регулярно необходимо запускать реиндексацию приложения, обновление статистик БД, очистку данных в таблицах различных журналов (там, где это можно и нужно), сжатие (shrink) БД. Реже но тоже нужно запускать глобальную компиляцию приложения. Опционально — перекрестные ссылки.
__________________
Felix nihil admirari |
|
15.04.2010, 07:09 | #9 |
Участник
|
На сколько мне известно, после перестройки индексов ещё рекомендуют выполнять обновление статистики...
Например вот так: X++: DECLARE @TableName varchar(30) DECLARE myCur CURSOR FOR Select RTRIM(CONVERT(varchar(30),TABLE_NAME)) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME<>'dtproperties' OPEN myCur FETCH NEXT FROM myCur INTO @TableName WHILE @@FETCH_STATUS=0 BEGIN BEGIN TRANSACTION t1 EXECUTE('UPDATE STATISTICS '+@TableName ); COMMIT TRANSACTION t1 FETCH NEXT FROM myCur INTO @TableName END CLOSE myCur DEALLOCATE myCur
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
15.04.2010, 11:16 | #10 |
----------------
|
Цитата:
рекомендуют выполнять обновление статистики...
Например вот так: sp_updatestats |
|
|
За это сообщение автора поблагодарили: hated8 (1). |
15.04.2010, 11:30 | #11 |
Участник
|
Ну, лучше или хуже не скажу, но работают по разному:
sp_updatestats - обновляет всю устаревшую статистику UPDATE STATISTICS - обновляет статистику вне зависимости от возраста... А вот в sql 2000 - работают одинаково... Цитата:
Инструкция UPDATE STATISTICS WITH RESAMPLE обновляет всю статистику по таблице в соответствии с текущим показателем выборки. Это значит, что для обновления статистик, привязанных к индексам, созданных полным просмотром при построении индекса, требуется сканирование всей таблицы. Это может быть очень длительной операцией, особенно в случаях, когда в ней участвуют большие секционированные таблицы с множеством индексов. Обновление каждой статистики требует считывания больших объемов данных. Чтобы избежать этой проблемы, рассмотрите возможность использования процедуры sp_updatestats (Transact-SQL). Таким образом, статистики будут обновляться только по мере необходимости.
http://technet.microsoft.com/ru-ru/l...SQL.90%29.aspx http://technet.microsoft.com/ru-ru/l...SQL.90%29.aspx
__________________
Что сломалось не знаем, но уже немного подчинили... Последний раз редактировалось hated8; 15.04.2010 в 11:51. |
|
|
|