mysql соединение занимает слишком много времени после нескольких соединений


У меня есть Mysql 5.7 на Centos 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 = 10M
innodb_log_buffer_size = 8M
max_connections = 250
sort_buffer_size = 64M

long_query_time = 5
slow_query_log = 1
skip-name-resolve

Как вы можете видеть, у меня есть skip-name-resolve в любом случае я сделал тест.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();
}

Когда я выполняю этот тест.php после 65-го цикла я вижу, что длительность соединения увеличивается до 1 секунды даже 3 секунды вот пример вывода:

...
...
query: 62) 0.0028440952301025
connection: 0.0020878314971924
query: 63) 0.002816915512085
connection: 0.002126932144165
query: 64) 0.002856969833374
connection: 1.0042409896851
query: 65) 0.013001918792725
connection: 1.0027761459351
query: 66) 0.01302695274353
connection: 1.002720117569
query: 67) 0.012753009796143
connection: 1.003103017807
query: 68) 0.012816905975342
connection: 1.0031731128693
query: 69) 0.012447118759155
connection: 1.003485918045
query: 70) 0.012918949127197
...
...

Каждый раз, когда я проводил этот тест.результат php был таким же, всегда увеличивая время соединения до неприемлемых времен после 65-го цикла. я действительно в замешательстве. У кого-нибудь есть Аня?

Лучший с уважением.

2 2

2 ответа:

Мы решили проблему, с которой ничего не было о самом сервере mysql. Проблема заключалась в имени хоста centos7, учитывая, что имена хостов не были реальными, поэтому ОС пыталась решить их, и слишком долго было два решения:

1) установка их с localhost с помощью

hostnamectl --transient set-hostname "localhost"

2) redirct ваше поддельное имя хоста localhost, предположимmysql-server1.mydomain.com является именем хоста сервера

echo 127.0.0.1 mysql-server1.mydomain.com > /etc/hosts

Вы не должны создавать так много соединений, а только одно:

$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();