dbExpress и SQL Server 2008 работают медленно - PullRequest
3 голосов
/ 26 декабря 2011

Я недавно мигрировал с Delphi 7 с SQL Server 2000 на Delphi 2010 с SQL Server 2008. Я использую dbExpress.

После установки новой версии я обнаружил, что на сайтах, которые имеют много данныхэта система стала медленной и нестабильной.

Может кто-нибудь сказать мне, если есть проблема между dbExpress и SQL Server 2008?Пожалуйста, помогите !!!!!

1 Ответ

1 голос
/ 19 мая 2012

Выполнив трассировку профилировщика, вы увидите, есть ли у вас какие-либо узкие места на SQL Server.Ваша трассировка профилировщика по умолчанию (включая TextData for RPC: Completed) должна быть достаточной для начала.

Трассировку профилировщика можно проанализировать, чтобы увидеть, что занимает больше всего времени.Вы можете легко загрузить трассировку в таблицу и проанализировать ее там.Обратите внимание, что при загрузке в таблицу столбец длительности указывается в микросекундах.См. Функцию fn_trace_gettable для более быстрого способа загрузки файла трассировки в таблицу.

Распространенной причиной низкой производительности, особенно после серьезных изменений, является плохая индексация.Начиная с SQL Server 2005 оптимизатор хранит в структурах в памяти те индексы, которые он хотел бы видеть.Доступ к ним можно получить с помощью динамических административных представлений sys.dm_db_missing_index_details, sys.dm_db_missing_index_groups и sys.dm_db_missing_index_groups_stats.

Вот простой пример SQL для создания отсутствующего индекса, который генерирует отсутствующий индексный отчет, включая базовый код индекса, в том числе базовый код.

select
d.statement
,   d.equality_columns
,   d.inequality_columns
,   d.included_columns
,   s.user_seeks    Seeks
,   s.last_user_seek
,   cast (s.avg_total_user_cost as decimal (9,2)) Cost
,   s.avg_user_impact   [%]
, 'CREATE INDEX MissingIndex_ ON ' + d.statement + '('
    + case when equality_columns IS NOT NULL then equality_columns else '' end
    + case when equality_columns IS NOT NULL AND inequality_columns IS NOT NULL then ', ' else '' end
    + case when inequality_columns IS NOT NULL then inequality_columns else '' end
    + ')'
    + case when included_columns IS NOT NULL then ' INCLUDE (' + included_columns + ')' else '' end
AS SQL
from sys.dm_db_missing_index_details d
INNER JOIN sys.dm_db_missing_index_groups g ON d.index_handle = g.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats s ON g.index_group_handle = s.group_handle
...