я использую 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'
По моему пониманию проблемы, не легко спроектировать масштабируемую базу данных. Рассмотрим следующие предложения:
Используйте пулы соединений. Пул соединений будет пытаться автоматически
по возможности повторно использовать существующее соединение. Итак, 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 в
посмотрим, поможет ли
Других решений пока нет …