2

我想知道是否可以为以下问题提供一些提示或指导。

环境类型:小型办公室,大约 20 个用户。网络:所有服务器、工作站属于一个子网基础设施:虚拟化网络服务器和虚拟化数据库服务器。

目前我有一个运行 Apache 2.2.22 (Win32) 和 PHP 5.3.10 的 Web 服务器 (Win7SP1 x64)。我已经构建了一些连接到我们的数据库(SQL2k8 Express)并调用过程的页面,这些过程基本上只是带有连接和条件的基本选择语句。一旦返回结果集,PHP 会逐行遍历结果集,并在流经时显示行。

有时,结果页面可能需要很长时间才能加载,其中没有显示结果集,但 Web 浏览器加载栏/图标闪烁。有时它只会在加载结束时显示一个空白屏幕,这通常意味着查询连接已超时,或者有时它会返回结果集。例如,在正常情况下,页面加载大约需要 1-3 秒,而在奇数情况下,可能需要 20-30 秒。

我注意到,如果我在 SQLSVR Mgmt Studio 中运行查询,可能需要约 5 秒才能返回结果集的查询可能需要约 15 秒才能加载到我的 Web 服务器上。

我知道糟糕的 PHP 编码会导致速度变慢,但奇怪的性能行为让我有点困惑,因为我确信我的编码并没有那么糟糕。

因此,如果人们可以就我如何诊断或隔离问题提供一些建议,或者建议我可以研究的领域,那就太好了。我知道有 Apache 日志、SQL SVR 日志和性能指标,但我对这个领域还是很陌生,我真的迷失了我应该采用的方法/方法。

例如,我应该在 Apache 等中启用的任何特定模块或我应该使用的 Apache 服务器类型、Web 服务器中的连接套接字等?

我的 PHP 查询/过程调用示例

$queryStatement = "exec myProc @para1='asd'";
$prepare = $dbConnect->prepare($queryStatement);
$result = $prepare->execute();
WHILE($result = $prepare->fetch(PDO::FETCH_ASSOC)){
set_time_limit(180);
echo $result
}

祝大家好运:)

4

1 回答 1

0

我建议您阅读有关如何处理 SQL Server 性能故障排除的内容。Waits and Queues方法是一个好的开始,但如果你是绝对的初学者,它可能有点太抽象了。SQL Server 文章中还有“性能问题疑难解答”,这是一种更实用的方法来识别瓶颈。SQL Server 客户咨询团队整理了一个可以提供帮助的性能故障排除流程图。还有很多好书,比如Professional SQL Server 2008 Internals and TroubleshootingTroubleshooting SQL Server - A Guide for the Accidental DBA(还有更多)。

一些可能导致与您描述的症状相似的原因:

  • 一个糟糕的查询计划。有时你会得到一个在 1-2 秒内执行的好计划,但有时你会得到一个需要 30 秒的坏计划。这个问题在应用程序中的慢,SSMS 中的快?了解性能奥秘和调查需要捕获和比较执行计划。但是,症状是问题页面是响应式的,然后突然间,在 30 秒的加载时间内变得无响应,保持无响应一段时间,然后又神秘地再次响应。
  • 锁定更新争用。这意味着您的读取被阻塞在等待提交的写入后面。这将导致零星的单次、奇数、无响应的页面。但是 30 秒的加载意味着 30 秒的写入,这是不太可能的。
  • 数据库增长事件,特别是日志增长事件。这会导致您所描述的症状:奇怪的,一次,无响应的页面需要 30-40 秒才能加载。此外,当这种情况发生时,您网站上的任何页面都需要 30-40 秒才能加载,然后它们都会再次响应。这可以通过您的数据库文件(特别是日志文件)必须增长来解释,而 30-40 秒是扩展文件并将其初始化为零所需的时间。幸运的是,这很容易调查:增长事件在性能计数器SQL Server、数据库对象 日志增长中可见: 数据库的事务日志被扩展的总次数。如果此计数器在您的数据库中不为零,则可能是罪魁祸首。不幸的是,数据文件的增长没有被捕获,但它们被捕获在默认跟踪中(链接的文章显示了如何阅读它)。请注意,日志增长还表明您设置了非简单的恢复模型并且没有发生日志备份,您的日志可能会增长直到填满整个磁盘......使用sys.database_files易于验证。

这些只是一些基本的想法,几乎没有掠过你需要看的表面......不幸的是,没有灵丹妙药。

于 2012-10-30T09:49:30.543 回答