php mysql 列では、ProxySQL が PHP/MySQL のパフォーマンスをどのように向上させるかを紹介します。
数日前、Twemproxy を介して Redis 接続プールを実装して PHP/Redis のパフォーマンスを向上させる方法を紹介しました。今日は、MySQL 接続プールを実装して PHP/MySQL のパフォーマンスを向上させることができる ProxySQL を紹介したいと思います。実際、原理は似ています。詳しく説明するために別の記事を書く必要はありませんが、その過程ではProxySQL の構成と使用中に、いくつかの小さな問題が発生したので、記録しておきたいと思います。
# インストール手順については、公式 Wiki に詳しく説明されています。主に構成ファイル /etc/proxysql.cnf を確認します:
datadir="/var/lib/proxysql" admin_variables= { admin_credentials="admin:admin" mysql_ifaces="0.0.0.0:6032" } mysql_variables= { threads=4 max_connections=2048 default_query_delay=0 default_query_timeout=36000000 have_compress=true poll_timeout=2000 interfaces="/var/run/proxysql.sock" default_schema="information_schema" stacksize=1048576 server_version="5.5.30" connect_timeout_server=3000 monitor_username="monitor" monitor_password="monitor" monitor_history=600000 monitor_connect_interval=60000 monitor_ping_interval=10000 monitor_read_only_interval=1500 monitor_read_only_timeout=500 ping_interval_server_msec=120000 ping_timeout_server=500 commands_stats=true sessions_sort=true connect_retries_on_failure=10 } mysql_servers = ( { address="..." port=3306 } ) mysql_users: ( { username = "..." password = "..." } )
注意すべき最も重要なことは、ProxySQL は SQLite を使用して構成情報を保存することです。構成ファイルは、次の場合にのみ有効です。初めて起動されると、それ以降の構成は SQLite から取得されます。構成ファイルの使用を強制する場合は、初期コマンドを使用する必要があります。詳細については、「ProxySQL のインストールと構成の詳細な説明」を参照してください。さらに、注意すべき細かい点がいくつかあります:
まず、admin_variables の admin_credentials に注意してください。デフォルト値は「admin:admin」です。これは、デフォルトのユーザー名とパスワードが両方とも「admin:admin」であることを意味します。デフォルト値は「0.0.0.0:6032」で、すべてのネットワーク インターフェイスのポート 6032 をリッスンすることを意味します。外部ネットワークからアクセスできるネットワーク インターフェイスがあり、悪意のあるユーザーがアクセスできると想像してください。はデフォルトのユーザー名とパスワードを使用して管理システムに入ることができるため、デフォルトのユーザー名とパスワードを使用したり、デフォルトで外部ネットワーク インターフェイスでリッスンしないように注意してください。覚えて!覚えて!
2 番目に、mysql_variables のインターフェイスに注意してください。PHP はローカル Unix ドメイン ソケット経由で ProxySQL 接続プールをリクエストする必要があるため、インターフェイスでは ip:port 形式を使用せず、ローカルのインターフェイスに設定する必要があります。 Unix ドメイン ソケット形式です。この例では、/var/run/proxysql.sock に設定されています。多くの人がソケット ファイルを /tmp パスの下に置きたがることに注意してください。これは良い習慣ではありません。結局のところ、 /tmp は名前からしてパスのようには見えません。良家の女性、誰もが二度やりたいと思っていますが、それができない人はいますか? rm後はダメです。
最後に、mysql_variables のmonitor_username とmonitor_password に注意してください。これは、ProxySQL がバックエンド MySQL サーバーのステータスをいつでも追跡できるように、監視ユーザーの関連情報を設定します。必ず覚えておいてください。バックエンドのMySQLサーバーに対応するアカウントを事前に作成しておきましたが、最初に監視アカウントを作成しなかった結果、ProxySQLがしばらく実行すると応答しなくなりました。これは、ProxySQLがアクセスを試行し続けるためです。バックエンド サーバーが構成で監視アカウントとパスワードを使用すると、大量の「アクセスが拒否されました」メッセージが生成されます。 ユーザー 'monitor'@'...' のエラーが特定のしきい値に達すると、「多くの接続エラーのため、ホスト '...' がブロックされています」が発生します。このとき、ProxySQL は次のことを行うことができません。 MySQL では「mysqladmin」を使用する必要があります。flush-hosts で十分です。関連するログ情報は、「SELECT * FROMmonitor.mysql_server_ping_log」で確認できます。
パフォーマンスがどのようなものであるかを確認するためにストレス テストを実行してみましょう。テスト スクリプト test.php は次のとおりです:
<?php $host = '...'; $user = '...'; $password = '...'; $database = '...'; $charset = 'utf8mb4'; $socket = '/var/run/proxysql.sock'; $dsn = "mysql:dbname={$database};charset={$charset}"; if (empty($_GET['proxysql'])) { $dsn .= ";host={$host}"; } else { $dsn .= ';unix_socket={$socket}'; } $dbh = new PDO($dsn, $user, $password); $sql = 'SELECT * FROM foo LIMIT 10'; $value = $dbh->query($sql); foreach ($value as $v) { var_dump($v); } ?>
ab を使用して高同時実行性のシナリオをシミュレートし、ストレス テストを実行します
shell> ab -k -n 10000 -c 100 "http://path/test.php?proxysql=0" shell> ab -k -n 10000 -c 100 "http://path/test.php?proxysql=1"
最終的に、一般的に構成されたサーバーでは、ProxySQL を使用しない場合は約 1,500 RPS、ProxySQL を使用すると約 2,000 RPS が得られました。つまり、ProxySQL は 25% のパフォーマンスをもたらしました。改善。 。
さらに関連記事を知りたい場合は、php mysql 列に注目してください。
以上がProxySQLによるPHP/MySQLのパフォーマンス向上について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
