У меня есть экземпляр SQL Server 2005, который работает медленно. Этосвязьпоказывает детали perfmon. Поскольку я не анализирую этот тип данных ежедневно, мне было интересно, есть ли какие-то реальные проблемы с системой ввода-вывода.
Сервер использует SAN, а файлы DB и файлы Tempdb находятся на одном диске (E:). Не самая лучшая архитектура, но у меня нет контроля над сервером. Сервер используется для запуска отчетов с использованием Cognos, поэтому в основном это база данных только для чтения.
Спасибо
Вот забавный код, который нужно исправить.
select "tempSalesRpt_SubRgnDist"."Region" AS "Region",
min("tempSalesRpt_SubRgnDist"."RegionName") AS "Region_Text"
from "SalesReporting"."dbo"."tempSalesRpt_SubRgnDist" "tempSalesRpt_SubRgnDist",
(select "SecurityMaster"."Userid" AS "Userid", "SecurityMaster"."SoldTo" AS "SoldTo"
from "SalesReporting"."dbo"."SecurityMaster" "SecurityMaster"
where "SecurityMaster"."Userid" = lower ('USTGACA')) "SecurityMaster4"
where NOT "SecurityMaster4"."Userid" is null
and "tempSalesRpt_SubRgnDist"."SoldTo" ="SecurityMaster4"."SoldTo"
group by "tempSalesRpt_SubRgnDist"."Region"
order by 1 asc , 2 asc
Таблица securitymaster доступна при каждом запросе, и именно эта таблица в последнее время увеличилась.
Я бы предположил, что этот код не поддается sarg-анализу, но план выполнения показывает, что используются поиск по индексу и поиск по ключу.
Я вижу, что некоторые новые индексы могли бы помочь, но нужно копать глубже.
решение1
На основании предоставленных данных у вас что-то происходит. Ваши дисковые очереди составляют секунды на чтение, а счетчики секунд на запись намного выше, чем вам хотелось бы. Теперь подвох в том, что это не означает, что проблема с диском, просто диски забиты. У вас может быть проблема с индексацией или проблема со статистикой, из-за которой SQL Server нагружает диски сильнее, чем нужно.
Начните с просмотра индексов в базе данных и посмотрите, нужно ли создавать новые индексы. Это увеличит размер вашей базы данных, но вы увидите сокращение трафика на диск и уменьшение времени выполнения запроса.
Вы можете начать с просмотра планов выполнения ваших длительных запросов, которые подскажут вам, где необходимо добавить индексы.
решение2
В дополнение к ответу Денни, у вас на компьютере около 5 ГБ свободной памяти. Правильно ли вы настроили память SQL?
Если у вас 32-битная система, вы можете выделить больше памяти, включив AWE:
http://technet.microsoft.com/en-us/library/ms190673(SQL.90).aspx
SQL будет использовать эту дополнительную память для кэширования большего количества таблиц/индексов базы данных (при условии, что размер вашей базы данных превышает объем свободной памяти).