我正在使用基于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 :(得分:0)
根据我对该问题的理解,设计可扩展数据库并不容易。请考虑以下建议:
使用连接池。连接池将尝试自动进行 尽可能重用现有连接。所以30个连接 可能被超过30个并发用户使用。请参阅 http://php.net/manual/en/mysqlnd-ms.pooling.php了解更多信息。
对数据库进行分区。也就是说,如果一个数据库不足, 然后使用多个。这是一个有点大的话题,你可以从这开始 https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html。 Azure SQL数据库的那些准则 (https://msdn.microsoft.com/en-us/library/azure/dn495641.aspx)可以 也有帮助,虽然数据库引擎不同,但大多数概念都是 同样。
用于内存存储。 MySQL目前不提供完整的 一组内存数据库功能。但MEMORY存储引擎 有帮助。内存存储通常可以提高性能a 许多。但请注意,有一些限制。这实际上是 主要数据库供应商(包括开源)的一个领域 不断投资。并记住数据库服务器是否没有 有足够的记忆力,根本无济于事。请检查 https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html来 看看是否有帮助。