本来好好的,昨天突然就没问题,打开一个页面,要20,30秒。。
试着打开静态页面,很快,说明是php或mysql的问题。。
然后跟踪,发现在mysql_connect()这个函数的时候,花了20秒的时间,
把数据库改成本地的,发现查询很快,去连局域网内另一台电脑的数据库,很慢
奇怪了,我网络状没改,php代码没改,mysql也没改,怎么就查询的这么慢了呢?求指点急呀。。会不会跟mysql连接数有关呀??

解决方案 »

  1.   

                if (PHP_VERSION >= '4.2')
                {
                    $this->conn_id = @mysql_connect($dbhost, $dbuser, $dbpw, true);
                }
                else
                {
                    $this->conn_id = @mysql_connect($dbhost, $dbuser, $dbpw);            }
                if (!$this->conn_id)
                {
                    if (!$quiet)
                    {
                        $this->ErrorMsg("Connect Eorror MySQL Server($dbhost)!");
                    }                return false;
                }  在这 @mysql_connect($dbhost, $dbuser, $dbpw);
     花了20秒的时间
      

  2.   

    个人觉得是你的网络协议的问题! 你本机数据库没有问题 链接局域网中的有问题  同时你链接 非本机的数据库出现这个问题 那么可能出现在链接的协议有什么问题! 还有 你换一个链接的方式 尝试下 看是不是PHP的这个函数根你的环境出现碰撞 你测试下 
      

  3.   

    请教一个问题 php mysql_pconnect  与 mysql_connect 比较有什么利与弊呢 
      

  4.   

    服务器网络快慢会导致楼主提出的问题
    你ping你的服务器(在出现逆所说的问题的时候多ping几次,看看是不是断断续续的)
      

  5.   

    如果数据库的磁盘空间满了.也会产生影响的.
    mysql_pconnect是持久性连接,如果你在程序中不去关闭,这样的话,如果访问数据的量比较多,连接池会满,就会产生资源耗尽,这样网站访问起来就会比较慢甚至访问不了.因为mysql的连接时有限制的.
    mysql_connect在使用完毕后,会自动关闭连接,释放连接池.
    如果不是频繁的访问数据库,一般的就用mysql_connect。
      

  6.   

    晕了,我用 mysql_pconnect 与 mysql_connect
    都会出现数据库连接很慢
    会不会跟php的版本有关系呀,,吐血中
    我用的是 linux+php5.1.6+nginx
      

  7.   

    或者是我php哪里设置有问题?
      

  8.   

    直接用mysql服务器的ip呢,如果不能用ip,那么就在服务器上手动指定hosts
      

  9.   

    你的mysql不在同一个服务器中.
     受网速影响是肯定的.
      

  10.   

    [MySQL]
    ; Allow or prevent persistent links.
    mysql.allow_persistent = On; Maximum number of persistent links.  -1 means no limit.
    mysql.max_persistent = -1; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    mysql.max_links = -1; Default port number for mysql_connect().  If unset, mysql_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    mysql.default_port =; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    mysql.default_socket =; Default host for mysql_connect() (doesn't apply in safe mode).
    mysql.default_host =; Default user for mysql_connect() (doesn't apply in safe mode).
    mysql.default_user =; Default password for mysql_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    mysql.default_password =; Maximum time (in secondes) for connect timeout. -1 means no limit
    mysql.connect_timeout = 60; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
    ; SQL-Errors will be displayed.
    mysql.trace_mode = Off[MySQLi]; Maximum number of links.  -1 means no limit.
    mysqli.max_links = -1; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    mysqli.default_port = 3306; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    mysqli.default_socket =; Default host for mysql_connect() (doesn't apply in safe mode).
    mysqli.default_host =; Default user for mysql_connect() (doesn't apply in safe mode).
    mysqli.default_user =; Default password for mysqli_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    mysqli.default_pw =; Allow or prevent reconnect
    mysqli.reconnect = Off[mSQL]
    ; Allow or prevent persistent links.
    msql.allow_persistent = On; Maximum number of persistent links.  -1 means no limit.
    msql.max_persistent = -1; Maximum number of links (persistent+non persistent).  -1 means no limit.
    msql.max_links = -1====================================================
    php.ini里面的配置都没怎么改
      

  11.   

    你的$dbhost用的是域名还是ip地址啊?你尝试直接在服务器上用其他客户端连接mysql服务器呢?你直接用服务器上的其他通讯协议访问mysql所在的服务器呢?
      

  12.   

    用Navicat for MySQL连接软件连一下。如果也慢。那就是网络问题。
      

  13.   

    Navicat for MySQL连接 没问题
      

  14.   

    或者会不会跟nginx 有关呢。。我都晕了。。
      

  15.   

    只有上千条数据,也查了20秒钟呀,就感觉好像停在那儿等时间一样,一到10秒或者20秒,立马出结果。。
    但是这种情况也是查10有5,6次出现,不是每次都这样。
    另外,我用jsp代码去查同一个数据,很快的想来想去,真可能是php.ini 设置问题,或者 php的版本问题(现版本 5.1.6)或者nginx有问题。。
    不知道如何解决
      

  16.   

    是不是默认安装的mysql,DNS反向解析没有关闭?
    尝试在mysql服务端的my.cnf配置文件的[mysqld]下加进去skip-name-resolve
    然后重启,试试.
      

  17.   

    skip-name-resolve 这个加了的。。
      

  18.   

    如果localhost正常,而且数据库记录数量的数量级差的不多,应该首先考虑网络连接的问题。PING的参数显示是否正常?远程或者本级是否有防火墙之类的东东在对3306端口进行扫描?
      

  19.   

    请问一下,mysql的 wait_timeout 是如何设的我在 my.cnf里面改成 将 600改成60 可,
    show VARIABLES like '%timeout%';还是600,
    set global wait_timeout=60;
    返回:Query OK, 0 rows affected (0.00 sec)
    set wait_timeout=60;
    返回:Query OK, 0 rows affected (0.00 sec)重启后再show VARIABLES like '%timeout%';
    还是 600,操蛋了
      

  20.   

    我发现重启 mysql 之后,要快很多,所以我想设 wait_timeout ,可怎么都改不了。。求解
      

  21.   

    你确定你看到my.cnf就是你mysql真正使用的配置,最简单的方法,改错一点,看还能否正常启动mysql
      

  22.   

    /var/lib/mysql 目录下有很多 mysql-bin.00001~0000100文件
    是日志文件吗?可删除否?
      

  23.   

    我删除了日志,将 my.cnf 的配置参数做了修改,打开速度比之前好很多了。。
    不过,感觉还是没解决问题,需要进一步观察
      

  24.   

    果然呐,好了几天,又开始慢了。。php代码没变,my.cnf设置没变。。
    可网站却变慢了系统中有啥时在变的呢,而且变化是影响访问速度的呢。
    物理内存??mysql日志??还是有其它??等待高手来解答,帮我找到问题的根本所在
      

  25.   

    我 netstat -ano 发现了大量的  TIME_WAIT 和 ESTABLISHED

    10.10.10.30:33603           10.10.10.31:mysql           TIME_WAIT
    求解呀。。
      

  26.   

    在http.conf配置文件中加上允许访问的IP,这样就快很多,我也遇到过类似的情况