Соединение с MySQL пропало

я использую clearDB база данных для моего windows azure основан php приложение. Я получаю неустойчивую ошибку на mysql соединения. В настоящее время у нас есть почти 2000 онлайн-клиентов. И у нас есть 30 подключений из базы данных.

Как я могу масштабировать сайт и преодолеть эту ситуацию?

Я забочусь о закрытии соединения в большинстве случаев. На данный момент я предотвратил ошибки сервера этим:

try {
$this->_conn = $this->dbh = new PDO('mysql:host=' . DB_SERVER . ';dbname='. DB_NAME, DB_USER, DB_PASS);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Couldn't connect to database. Please try again!");
}

Так что, если не осталось никаких соединений, то будет показано соответствующее сообщение. Но это не выполнимо для сайтов, обращенных к клиенту. Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ

Как я могу проанализировать эти данные:

Array
(
[0] => Array
(
[Variable_name] => Connections
[Value] => 505369
)

[1] => Array
(
[Variable_name] => Threads_cached
[Value] => 54
)

[2] => Array
(
[Variable_name] => Threads_connected
[Value] => 65
)

[3] => Array
(
[Variable_name] => Threads_created
[Value] => 1038
)

[4] => Array
(
[Variable_name] => Threads_running
[Value] => 4
)
)

Я получил выше результат после: SHOW STATUS WHERE variable_name LIKE 'Threads_%' OR variable_name = 'Connections'

0

Решение

По моему пониманию проблемы, не легко спроектировать масштабируемую базу данных. Рассмотрим следующие предложения:

  • Используйте пулы соединений. Пул соединений будет пытаться автоматически
    по возможности повторно использовать существующее соединение. Итак, 30 соединений
    могут быть использованы более 30 одновременно работающих пользователей. Пожалуйста, обратитесь к
    http://php.net/manual/en/mysqlnd-ms.pooling.php для дополнительной информации.

  • Разделите базу данных. То есть, если одной базы данных недостаточно,
    затем используйте несколько. Это немного огромная тема, вы можете начать с
    https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html.
    Эти рекомендации для баз данных SQL Azure
    (https://msdn.microsoft.com/en-us/library/azure/dn495641.aspx) Можно
    также помогают, хотя ядро ​​базы данных отличается, большинство понятий
    тот же самый.

  • Используйте в памяти. MySQL в настоящее время не предлагает полный
    набор функций базы данных в памяти. Но память ПАМЯТИ
    мог бы помочь. Хранение в памяти обычно может улучшить производительность
    много. Но, пожалуйста, обратите внимание, что есть некоторые ограничения. Это на самом деле
    одна область, где основные поставщики баз данных (в том числе с открытым исходным кодом)
    постоянно инвестировать. И помните, если сервер базы данных не
    иметь достаточную память, это не поможет вообще. пожалуйста, проверьте
    https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html в
    посмотрим, поможет ли

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]