検索
ホームページトピックphpmysqlProxySQL メソッドによる PHP/MySQL のパフォーマンスの向上

ProxySQL メソッドによる PHP/MySQL のパフォーマンスの向上

関連する学習の推奨事項: mysql チュートリアル

数日前、Redis 接続プールを実装する方法を紹介しました。 Twemproxy: これにより、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.configurationから取得します。構成ファイルの使用を強制する場合は、初期コマンドを使用する必要があります。

まず、admin_variables の admin_credentials に注目してください。デフォルト値は「admin:admin」です。これは、デフォルトのユーザー名とパスワードが両方とも admin であることを意味します。値が「0.0.0.0:6032」の場合は、すべてのネットワーク インターフェイスのポート 6032 をリッスンすることを意味します。外部ネットワークからアクセスできるネットワーク インターフェイスがあると想像してください。悪意のあるユーザーは、デフォルトのユーザー名とパスワードを使用してアクセスできるようになります。したがって、デフォルトのユーザー名とパスワードを使用しないでください。また、デフォルトで外部ネットワーク インターフェイスでリッスンしないように注意してください。覚えて!覚えて!

2 番目に、mysql_variables のインターフェイスに注意してください。PHP はローカル Unix ドメイン ソケット経由で ProxySQL 接続プールをリクエストする必要があるため、インターフェイスでは ip:port 形式を使用せず、ローカルのインターフェイスに設定する必要があります。 Unix ドメイン ソケット形式です。この例では、/var/run/proxysql.sock に設定されています。多くの人がソケット ファイルを /tmp パスの下に置きたがることに注意してください。これは良い習慣ではありません。結局のところ、 /tmp は名前からしてパスのようには見えません。良家の女性は誰でも 2 回やりたがります。誰かが 1 回 rm するとまずいかもしれません。

最後に、mysql_variables のmonitor_username とmonitor_password に注意してください。これは、ProxySQL がバックエンド MySQL サーバーのステータスをいつでも追跡できるように、監視ユーザーの関連情報を設定します。必ず覚えておいてください。バックエンドのMySQLサーバーに対応するアカウントを事前に作成するため、最初に監視アカウントを作成しなかった結果、ProxySQLがしばらく実行すると応答しなくなってしまったためです。 ProxySQL が構成内の監視アカウントとパスワードを使用し続けてバックエンド サーバーにアクセスしようとすると、「ユーザー 'monitor'@'...' のアクセスが拒否されました」エラーが大量に生成されます。しきい値に達すると、「接続エラーが多いため、ホスト '...' はブロックされています。この時点では、ProxySQL はリクエストに応答できません。MySQL では、「mysqladmin flash-hosts」が機能する必要があります。関連するログ情報は、「SELECT * FROMmonitor.mysql_server_ping_log」で確認できます。

パフォーマンスがどのようなものであるかを確認するためにストレス テストを実行してみましょう。テスト スクリプト test.php は次のとおりです:

<?php
$host = &#39;...&#39;;
$user = &#39;...&#39;;
$password = &#39;...&#39;;
$database = &#39;...&#39;;
$charset = &#39;utf8mb4&#39;;
$socket = &#39;/var/run/proxysql.sock&#39;;
$dsn = "mysql:dbname={$database};charset={$charset}";
if (empty($_GET[&#39;proxysql&#39;])) {
    $dsn .= ";host={$host}";
} else {
    $dsn .= &#39;;unix_socket={$socket}&#39;;
}
$dbh = new PDO($dsn, $user, $password);
$sql = &#39;SELECT * FROM foo LIMIT 10&#39;;
$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 サイトの他の関連記事を参照してください。

声明
この記事はjuejinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、