ホームページ > トピック > phpmysql > ProxySQLによるPHP/MySQLのパフォーマンス向上について詳しく解説

ProxySQLによるPHP/MySQLのパフォーマンス向上について詳しく解説

coldplay.xixi
リリース: 2020-11-17 16:50:11
転載
2897 人が閲覧しました

php mysql 列では、ProxySQL が 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 = &#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.im
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート