【问题标题】:php, mysql, opening database taking too longphp, mysql, 打开数据库耗时太长
【发布时间】:2012-02-05 04:38:20
【问题描述】:

我网站上的一个页面加载时间过长 - 大约 2 秒。在整个代码中使用 microtime 之后,我发现了它花费的时间太长并请求帮助以加快速度。

我用来查找时间的代码是

echo "<BR>3 - ".(microtime(true)-$startTime);  #How long it takes for this page to do
$sqldb=open_database();  #Open the database
echo "<BR>4 - ".(microtime(true)-$startTime);  #How long it takes for this page to do

我的结果是

3 - 5.1140758991241
4 - 6.1172299385071

因此我推断打开数据库的功能需要 1 秒。 用于打开数据库的函数是

//This function is to open the database
function open_database() {
    //Now we will connect to the database
    $sqldb=mysql_connect($_SESSION['hostname'], $_SESSION['dbusername'], $_SESSION['password']) OR die ('Unable to connect to database! Please try again later.');
    mysql_select_db($_SESSION['dbname'], $sqldb);  #Select which database we wish to use - in this case the customer one

    if(empty($sqldb)) {  //If there is no database then we have an error - MASSIVE ERROR!
        header('Location:'.$_SESSION['web_site'].'/error.php');
        die();
    }
    return($sqldb);
}

请注意,mysql_connect 中使用了 SESSION 变量,因此当我更新到生产服务器时,我只需更改一个变量。预生产服务器上的主机名是“localLhost”。

所以我的问题是 - 为什么打开数据库需要这么长时间?请注意,因为我处于预生产阶段,所以数据库非常小。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    会话存储在文件系统中,从文件系统读取也需要时间。如果它们存储在 php 代码中,那么它们将立即可供脚本使用。这可能是您的问题的一部分。

    让我提供一个可能的解决方案。创建 2 个新文件。

    dbconfig.prod.php dbconfig.dev.php

    为正确的环境将您的数据库配置信息放入每个文件中。在开发服务器上将 dbconfig.dev.php 符号链接到 dbconfig.php 在生产服务器上将 dbconfig.prod.php 符号链接到 dbconfig.php 然后在您的版本控制中忽略 dbconfig.php

    现在您不必为数据库配置存储做一些非标准的操作,例如会话,它可能会解决您的时间问题。虽然 IMO 1 秒并不是很多额外的时间。

    【讨论】:

    • 注意:会话可能存储在文件系统中。可以使用不同的后端。
    • 是的,但根据我的经验,这些不同的后端通常位于数据库中。由于他没有连接到数据库,我假设他会将会话存储在文件系统中。
    • 实际上,如果他在访问会话存储时遇到性能问题,我建议的第一件事是使用 memcached 支持的会话...
    【解决方案2】:

    究竟为什么要将数据库凭据存储在会话变量中?这些应该作为 php 变量或常量在 site.config 文件中,并且您的脚本应该从那里加载这些。存在会话变量,以便您可以存储基于连接的变量,而不是用于服务器端配置信息。

    【讨论】:

      【解决方案3】:

      另一件事是“mysql_connect”,它可能表明 PHP 很难解析(查找)mysql 主机。您使用的是 IP 地址、localhost 还是主机名? (在 PHP 中连接数据库时)如果是主机名,请尝试将 IP 添加到您的 hosts 文件中。

      【讨论】:

        猜你喜欢
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多