Php mysql连接在几次连接后花费的时间太长
我在Centos 7上安装了Mysql 5.7,这是我的.cnf:Php mysql连接在几次连接后花费的时间太长,php,mysql,centos,Php,Mysql,Centos,我在Centos 7上安装了Mysql 5.7,这是我的.cnf: datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock key_buffer_size = 512M query_cache_type = 1 query_cache_size = 1024M tmp_table_size = 32M innodb_buffer_pool_size = 2048M ##innodb_additional_mem_pool_size = 1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
key_buffer_size = 512M
query_cache_type = 1
query_cache_size = 1024M
tmp_table_size = 32M
innodb_buffer_pool_size = 2048M
##innodb_additional_mem_pool_size = 10M
innodb_log_buffer_size = 8M
max_connections = 250
sort_buffer_size = 64M
long_query_time = 5
slow_query_log = 1
skip-name-resolve
正如您所看到的,我已经跳过了名称解析,不管怎样,我创建了test.php:
<?php
for ($i = 0;$i<1000;$i++) {
$t1 = microtime(true);
$conn = new \mysqli("xx.xx.xx.xxx","xxxxxxx","xxxxxx","xxxx");
$t2 = microtime(true);
echo "connection: ". floatval($t2 - $t1). PHP_EOL;
$t3 = microtime(true);
$query = $conn->query("SELECT 1");
$t4 = microtime(true);
echo "query: ".$i.") ". floatval($t4-$t3) . PHP_EOL;
$conn->close();
}
每次我运行这个test.php的结果都是一样的,总是在第65次循环后将连接时间增加到不可接受的次数。我真的很困惑。有人知道吗
致以最诚挚的问候。您不应该创建这么多连接,而应该只创建一个:
$conn = new mysqli("xx.xx.xx.xxx","xxxxxxx","xxxxxx","xxxx");
for ($i = 0;$i<1000;$i++) {
$t1 = microtime(true);
$t2 = microtime(true);
echo "connection: ". floatval($t2 - $t1). PHP_EOL;
$t3 = microtime(true);
$query = $conn->query("SELECT 1");
$t4 = microtime(true);
echo "query: ".$i.") ". floatval($t4-$t3) . PHP_EOL;
}
$conn->close();
$conn=newmysqli(“xx.xx.xx.xxx”、“xxxxxxx”、“xxxxxx”、“xxxxx”);
对于($i=0;$iquery(“选择1”);
$t4=微时间(真);
回显“查询:.$i.”。浮动增值税($t4-$t3)。PHP_EOL;
}
$conn->close();
我们解决了这个问题,这与mysql服务器本身无关。问题是centos7的主机名,因为主机名不是真实的,所以操作系统试图解决这些问题,并且花费了太长的时间,出现了两个孤岛:
1) 使用localhost和
hostnamectl --transient set-hostname "localhost"
2) 将您的假主机名重拨到localhost,假设mysql-server1.mydomain.com是服务器的主机名
echo 127.0.0.1 mysql-server1.mydomain.com > /etc/hosts
我知道我不需要新的连接,但我模拟了我的http API,实际上我有一个http API,如果你向它发出GET请求,它会连接到DB并插入一个新行,但我对它进行了负载测试,我发现它的连接在一些请求之后花费了太多时间来设置
$conn=null代码>紧跟在$conn->close()之后
强制php释放变量。我这样做了,结果是一样的,真奇怪每次尝试第65个循环后速度会变慢:)我认为这与服务器设置有关,或者mysql 5.7的新功能尝试设置$query=null代码>当连接关闭时名称:(,这一次不是第65次循环,可能是关于我的客户机服务器每秒打开套接字有限制还是有限制?似乎有限制,我不是专家,但可能是关于centos或mysql 5.7
echo 127.0.0.1 mysql-server1.mydomain.com > /etc/hosts