0

ベースアプリケーションclearDBにデータベースを使用しています。接続で断続的なエラーが発生します。現在、 2000近くのオンライン顧客がいます。そして、データベースから30 の接続があります。windows azurephpmysql

どうすればウェブサイトを拡張し、この状況を克服できますか?

ほとんどの場合、接続を閉じる処理を行っています。今のところ、これでサーバーエラーを防ぎました:

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!");
}

したがって、接続が残っていない場合は、適切なメッセージが表示されます。ただし、顧客向けの Web サイトには適していません。どうすればこの問題を解決できますか?

編集

このデータを分析するにはどうすればよいですか:

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'

4

1 に答える 1

0

この問題についての私の理解では、スケーラブルなデータベースを設計するのは簡単ではありません。次の提案を検討してください。

  • 接続プールを使用します。接続プールは、可能な限り既存の接続を自動的に再利用しようとします。したがって、30 の接続は、30 人を超える同時ユーザーによって使用される可能性があります。詳細については、 http://php.net/manual/en/mysqlnd-ms.pooling.phpを参照してください 。

  • データベースを分割します。つまり、データベースが 1 つでは不十分な場合は、複数を使用します。これは少し大きなトピックです 。 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 Storage Engine が役に立ちます。通常、メモリ内ストレージはパフォーマンスを大幅に向上させることができます。ただし、いくつかの制限があることに注意してください。これは実際
    、主要なデータベース ベンダー (オープン ソースを含む) が継続的に投資している領域の 1 つです。また、データベース サーバーに十分なメモリがない場合は、まったく役に立ちません。https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.htmlを確認して、役立つかどうかを確認 してください。

于 2015-06-05T10:20:20.377 に答える