пара вопросов по производительности MS SQL Server

Granmer
Дата: 20.01.2009 16:49:54
Подскажите, пожалуйста, как узнать к какой из БД расположенных на сервере больше всего обращений и сколько ресурсов какая из них использует? Ведется такая статистика самим сервером или надо искать сторонние утилиты? Пока всё что видел, мониторит просто состояние SQL Server, а в разрезе отдельных БД, что-то не встречал.
Интересно было бы посмотреть, какая БД сильнее грузит процессор, больше потребляет памяти, дольше транзакции и т.п.

И ещё вопросик. Есть один WEB-портал, написан не нами, изменять ничего особо не можем. Он работает под IIS+ASP.NET и устанавливает 1 соединение с SQL Server от имени sa
При этом все транзакции, не зависимо от количества пользователей выполняются только на одном процессоре (ядре) (это заметили просто по загрузке ЦП). При этом, если один пользователь (портала) запустил длительную процедуру, то остальные ожидают выполнения этой процедуры... Можно ли как-то включить параллелизм в этом случае? Или, позволить одному процессу (соединению) использовать все доступные процессоры (ядра)?
DeColo®es
Дата: 20.01.2009 16:58:33
Есть статистика по выполняемым запросам внутри БД, получение можно посмотреть здесь.

Единственное, если процедура рекомпилится, статистика сбрасывается.
Ну и к данным базы можно обращаться из любой другой, что тоже может "исказить" статистику относительно того, что Вы хотите увидеть. :)
DeColo®es
Дата: 20.01.2009 16:59:59
Если все ждут выполнения процедуры, то дело не в параллелизме, а в блокировках.
Смотрите, что там заблокировано, почему и зачем.
Просмотр списка блокировок - sp_lock. Более подробно - лучше прочитать самому в BOL.
Glory
Дата: 20.01.2009 17:02:00
Granmer

При этом все транзакции, не зависимо от количества пользователей выполняются только на одном процессоре (ядре) (это заметили просто по загрузке ЦП). При этом, если один пользователь (портала) запустил длительную процедуру, то остальные ожидают выполнения этой процедуры... Можно ли как-то включить параллелизм в этом случае? Или, позволить одному процессу (соединению) использовать все доступные процессоры (ядра)?

А ваша процедура сама то позволяет выполнение из нескольких коннектов ?
Денис Ильин
Дата: 20.01.2009 17:20:48
может они экспресс версию используют?
Granmer
Дата: 20.01.2009 17:32:59
DeColo®es
Есть статистика по выполняемым запросам внутри БД

Интересно, попробуем посмотреть, но хотелось именно найти какая из нескольких БД сильнее других нагружает сервер.
Granmer
Дата: 20.01.2009 17:35:40
DeColo®es
Если все ждут выполнения процедуры, то дело не в параллелизме, а в блокировках.

Это да, скорее всего проблема в блокировках... "будем искать" :)
Но иногда бывает, что один пользователь запустит процесс и ему (процессу) выделяется только одно ядро, как я уже говорил. А при этом остальные 15 ядер совсем простаивают... Вот и хотелось бы как-то так подкрутить, чтобы ему выделялось больше чем одно ядро... Есть такая возможность?
Granmer
Дата: 20.01.2009 17:36:59
Glory

А ваша процедура сама то позволяет выполнение из нескольких коннектов ?

Да, там обычная выборка, при этом параллельно никаких вставок/модификаций данных не производится.
Granmer
Дата: 20.01.2009 17:37:30
Денис Ильин
может они экспресс версию используют?

нет - SQL Server 2005 Standart
Glory
Дата: 20.01.2009 17:39:14
Granmer
Glory

А ваша процедура сама то позволяет выполнение из нескольких коннектов ?

Да, там обычная выборка, при этом параллельно никаких вставок/модификаций данных не производится.

Откуда вы тогда видите, что из 2го коннекта выполнения этой же процедуры не происходит ?