3

我最近从带有 SQL Server 2000 的 Delphi 7 迁移到带有 SQL Server 2008 的 Delphi 2010。我正在使用 dbExpress。

安装新版本后,我发现在有大量数据的网站上,系统变得缓慢且不稳定。

谁能告诉我 dbExpress 和 SQL Server 2008 之间是否存在问题?请帮忙!!!!!

4

1 回答 1

1

通过执行探查器跟踪,您可以查看 SQL Server 上是否存在任何瓶颈。您的默认分析器跟踪(包括 RPC:Completed 的 TextData)应该足以开始使用。

可以分析探查器跟踪以查看耗时最长的部分。您可以轻松地将跟踪加载到表中并在那里进行分析。请注意,当加载到表中时,持续时间列以微秒为单位。有关将跟踪文件加载到表中的更快方法,请参见函数 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
于 2012-05-19T13:12:40.923 回答