我最近从带有 SQL Server 2000 的 Delphi 7 迁移到带有 SQL Server 2008 的 Delphi 2010。我正在使用 dbExpress。
安装新版本后,我发现有大量数据的网站系统变得缓慢且不稳定。
谁能告诉我 dbExpress 和 SQL Server 2008 之间是否存在问题?请帮忙!!!!
最佳答案
通过执行探查器跟踪,您可以查看 SQL Server 上是否存在任何瓶颈。您的默认探查器跟踪(包括 RPC:Completed 的 TextData)应该足以开始使用。
可以分析探查器跟踪以查看什么花费了最长的时间。您可以轻松地将跟踪加载到表中并在那里进行分析。请注意,加载到表中时,持续时间列以微秒为单位。有关将跟踪文件加载到表中的更快方法,请参阅函数 fn_trace_gettable。
性能不佳的一个常见原因(尤其是在重大更改之后)是索引不良。 自 SQL Server 2005 以来,优化器将其希望看到的索引存储在内存结构中。这些可以通过动态管理 View 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
关于delphi - dbExpress 和 SQL Server 2008 速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637617/