【问题标题】:Apache Server and SQL Server 2008 Express Performance. Isolate, method or suggestions [closed]Apache Server 和 SQL Server 2008 Express 性能。隔离,方法或建议[关闭]
【发布时间】:2012-10-30 08:21:14
【问题描述】:

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

环境类型:小型办公室,大约 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 等中启用任何特定的 mods 或我应该使用的 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
}

祝大家好运:)

【问题讨论】:

    标签: php sql-server performance apache debugging


    【解决方案1】:

    我建议您阅读有关如何处理 SQL Server 性能故障排除的一些信息。 Waits and Queues 方法是一个好的开始,但如果你是绝对的初学者,它可能有点过于抽象。还有Troubleshooting Performance Problems in SQL Server 文章,这是一种更实用的方法来识别瓶颈。 SQL Server 客户咨询团队已经整理了一个可以提供帮助的Performance Troubleshooting Flowchart。还有很多好书,比如Professional SQL Server 2008 Internals and TroubleshootingTroubleshooting SQL Server - A Guide for the Accidental DBA(还有很多)。

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

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

    这些只是一些基本的想法,仅略过您需要查看的内容的表面......不幸的是,没有灵丹妙药。

    【讨论】:

    • 非常感谢您的提示和指导!这无疑给了我需要研究的领域。在此之前,我真的不知道或者可以使用什么。干杯!当然,对于其他人,如果您有其他的 cmet 或提示,请随意。干杯:)
    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多