March 2007 - Posts

SQL Server BLOGROLL

В последнее время, наиболее полезными и интересными ресурсами интернета, которые посвящены всему спектру тем SQL Server, стали Веб-каналы или RSS-ленты. Подобными веб-каналами оснащаются и популярные сайты и персональные дневники. Стоит также отметить, что за последние три года резко возросло и продолжает увеличиваться число дневников (блогов) разработчиков SQL Server, сообщения которых бывают очень интересными и чрезвычайно полезными. Можно смело утверждать, что наиболее востребованной сейчас является информация из "первых рук"!
В рассылке я в течение нескольких лет публиковал ссылки и краткие анонсы статей, появляющихся на специализированных сайтах и в блогах специалистов. Каждую неделю таких статей появляется около сотни и, разумеется, далеко не все из них были отобраны для публикации в рассылке. Однако, не исключено, что оставшиеся "за бортом" статьи могут быть кому-то интересны. Кроме того, уже близок финальный 365-й выпуск рассылки. Всё это побуждает меня поделиться с Вами списком используемых мной Веб-каналов, который я постоянно пополняю и собираюсь делать это впредь. Список этот представлен в виде OPML файла (Формат OPML — Outline Processor Markup Language — язык разметки структуры), стандартного средства обмена (импорта/экспорта) списков RSS и ATOM ссылок, которое появилось в IE7.
Подробную информацию о том, как организован импорт/экспорт в IE7 можно получить в статье из блога разработчиков: Saving and loading feed lists in IE7 using OPML, или заглянув в блог Mike Gotta.
Чтобы загрузить к себе список моих веб-каналов, Вам нужно скачать файл feeds.opml.zip, распаковать из него экспортированный из моего IE7 файл в формате OPML и импортировать его в свой интернет-браузер. Подборка скриншотов импорта представлена на рисунке справа (щёлкните по нему, что бы увеличить).
Для тех, кто не использует IE7, я сделал специальную страничку, на которой все Веб-каналы представлены в виде сгруппированных по темам ссылок: SQL Server BLOGROLL

Posted by gladchenko | with no comments
Filed under:

Приборная панель производительности SQL Server 2005

Microsoft SQL Server 2005 Performance Dashboard Reports предназначен для контроля и получения необходимой для разрешения проблем производительности информации, собираемой с ваших серверов баз данных SQL Server 2005. Приборная панель работает с SQL Server и клиентскими компонентами Management Studio, для которых был установлен SP2 или последующий кумулятивный пакет обновлений.
Приборная панель производительности представляет собой отчёт Reporting Services, специально разработанный как пользовательский отчёт (Custom Reports), функциональность которых была добавлена во втором сервиспаке. Пользовательские отчёты появились в SQL Server Management Studio SP2, для того, чтобы их увидеть, нужно щёлкнуть правой кнопкой мыши по объекту в обозревателе объектов и в пункте "Отчёты" выбрать или загрузить rdl - файл пользовательского отчёта. Приборная панель облегчает отслеживание проблем производительности почти в реальном времени, а также акцентирует внимание администратора на ключевые показатели производительности сервера. С помощью этой панели можно отслеживать следующие события:

  • Бутылочное горлышко - процессоры (а также, какие запросы утилизируют процессоры больше всего);

  • Бутылочное горлышко - ввод-вывод (а также, какие запросы больше остальных используют ввод-вывод);

  • Рекомендации индексов, которые автоматически генерируются оптимизатором запросов (missing indexes);

  • Блокировки;

  • Конкурирующие краткие блокировки.

Вся эта информация получается из динамических административных представлений SQL Server и для сбора данных больше ничего не нужно, даже установка Reporting Services не является обязательной. Зато обязательно нужно установить SP2 (не забудте после SP2 установить постфикс!) и чтобы операционная система была: Windows Server 2003, Windows Vista или Windows XP.

Скачать панель можно отсюда: SQLServer2005_PerformanceDashboard.msi

Описание установки тут: SQL Server 2005 Performance Dashboard Reports

Скриншот заглавной страницы:

April 2, 2007 6:10 PM David said:

Because DATEDIFF returns and int once you have connection that is more than 24 days or so old it will overflow the dattype if you modify the procedure so caluclates the differnce in minutes first converts this to milliseconds then add the number of minutes diffrence onto the start time and then calculate the remianing number of milli seconds it will work so basicalyy if you modify trhe offending line

sum(convert(bigint, datediff(ms, login_time, getdate()))) - sum(convert(bigint, s.total_elapsed_time)) as idle_connection_time,

to

sum(convert(bigint, CAST ( DATEDIFF ( minute, login_time, getdate()) AS 
BIGINT)*60000 + DATEDIFF ( millisecond, DATEADD ( minute,
DATEDIFF ( minute, login_time, getdate() ), login_time ),getdate() ))) - sum(convert(bigint, s.total_elapsed_time)) as idle_connection_time,

then it will work hopes this helps the rest of you who have the same problem.

Posted by gladchenko | 2 comment(s)
Filed under:

Удаление привнесённых восстановлением следов полнотекстового поиска

Восстановление базы данных из резервной копии кроме восстановления файлов баз данных и журнала транзакций может восстановить метаданные о настройках репликации или полнотекстового поиска, которые использовались на сервере, где резервная копия создавалась. В данной статье мы рассмотрим случай, когда восстановление из резервной копии восстановило некоторую информацию о каталоге полнотекстового поиска, что может породить ряд проблем и поэтому требует принятия администратором баз данных мер по удалению лишних и вредных в данном случае метаданных о полнотекстовом индексе и связанных с ним объектах.
Чем же может быть вредна информация о фантомном полнотекстовом индексе? Например, Вы можете столкнуться с такой ситуацией, когда изменение схемы таблицы требует удаления первичного ключа, но это сделать не удаётся, и сервер в ответ на команду:

ALTER TABLE [dbo].[ИМЯ_ТАБЛИЦЫ] DROP CONSTRAINT [ИМЯ_ИНДЕКСА]; GO

Выдаёт следующее сообщение об ошибке:

Сообщение 7613, уровень 16, состояние 1, строка 1
Cannot drop index 'ИМЯ_ИНДЕКСА' because it enforces the full-text key for table or indexed view 'ИМЯ_ТАБЛИЦЫ'.
Сообщение 3727, уровень 16, состояние 0, строка 1
Could not drop constraint. See previous errors.

В данном случае, никакого полнотекстового каталога и индексов на сервере не создавалось, а информация о том, что указанный первичный ключ является ключом полнотекстового поиска по полям этой таблицы, была привнесена в момент восстановления базы данных из резервной копии. Следует отметить, что полнотекстовый поиск мог вообще никогда не использоваться, а был настроен и потом не полностью или не правильно удалён на сервере - источнике этой резервной копии.
Первым делом, следует убедиться, что компоненты полнотекстового поиска были установлены и служба Microsoft Search запущена. Кроме того, что бы ничего не мешало Вам в работе, убедитесь в том, что для базы данных отключена опция AUTOSHRINK.
Что бы проверить, задействован ли индекс в качестве полнотекстового ключа, можно выполнить следующий запрос к метаданным сервера:

SELECT INDEXPROPERTY(OBJECT_ID('ИМЯ_ТАБЛИЦЫ'), 'ИМЯ_ИНДЕКСА', 'IsFulltextKey'); GO

Свойство индекса IsFulltextKey говорит о том, является ли индекс полнотекстовым ключом для указанной таблицы. Если это так, то свойство принимает значение: 1 = True. Если индекс не является полнотекстовым ключом, значение свойства равно: 0 = False. Если возвращается NULL, это говорит о том, что были указаны неверные параметры.
В нашем случае, этот запрос возвращает 1, что говорит о том, что в наших метаданных имеется фантом полнотекстового индекса.
Теперь, давайте убедимся, что установку каталога полнотекстового поиска на нашем сервере не выполняли. Для этого выполним следующую системную хранимую процедуру:

EXEC sp_help_fulltext_tables; GO

Как и следовало ожидать, мы получили следующее сообщение об ошибке:

Сообщение 15601, уровень 16, состояние 1, процедура sp_help_fulltext_tables, строка 8
Full-Text Search is not enabled for the current database. Use sp_fulltext_database to enable Full-Text Search. The functionality to disable and enable full-text search for a database is deprecated. Please change your application.

Что же, воспользуемся подсказкой из сообщения об ошибке и запустим на исполнение в контексте нашей базы данных следующий код:

EXEC sp_fulltext_database 'enable'; GO

Теперь, когда включение полнотекстового поиска для нащшей базы данных состоялось успешно, давайте снова выполним:

EXEC sp_help_fulltext_tables; GO

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

EXEC dbo.sp_fulltext_column @tabname = N'[dbo].[ИМЯ_ТАБЛИЦЫ]', @colname = N'ИМЯ_ИСПОЛЬЗУЕМОГО_ПОЛЯ', @action = N'drop' GO

Что эквивалентно:

ALTER FULLTEXT INDEX ON [dbo].[ИМЯ_ТАБЛИЦЫ] DROP (ИМЯ_ИСПОЛЬЗУЕМОГО_ПОЛЯ) GO

А после того, как будут отключены все задействованные в полнотекстовых индексах поля таблицы, деактивировать в полнотекстовом поиске и саму таблицу:

EXEC dbo.sp_fulltext_table @tabname = N'[dbo].[ИМЯ_ТАБЛИЦЫ]', @action = N'deactivate' GO

Что эквивалентно:

DROP FULLTEXT INDEX ON [dbo].[ИМЯ_ТАБЛИЦЫ] GO

Теперь, запуск:

EXEC sp_help_fulltext_tables; GO

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

DROP FULLTEXT CATALOG [ИМЯ_КАТАЛОГА_ПОЛНОТЕКСТОВОГО_ПОИСКА] GO

Дополнительная информация: Хранимая процедура sp_fulltext_table, на самом деле, вносит изменения в системную таблицу sysobjects, поразрядно прибавляя или вычитая шестнадцатеричное число 189 к полю status, а в поле ftcatid размещается идентификатор каталога полнотекстового поиска. Кроме того, изменяется поле colstat (оно было = 16) соответствующей записи в системной таблице syscolumns. ИСТОЧНИК

Posted by gladchenko | with no comments
Filed under: