搜尋
首頁專題PHP Mysql詳解透過ProxySQL提升PHP/MySQL的效能

php mysql欄位介紹ProxySQL如何提升PHP/MySQL的效能。

詳解透過ProxySQL提升PHP/MySQL的效能

前些天我介紹如何透過 Twemproxy 實作 Redis 連線池,進而提升 PHP/Redis 的效能。今天要介紹一下ProxySQL,透過它可以實現MySQL 連線池,進而提升PHP/MySQL 的效能,其實原理是差不多的,本來沒必要再寫一篇文章贅述,不過我在設定使用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 取得配置。如果你想強制使用設定文件,需要使用 initial        指令。更多資訊可參考:ProxySQL之安裝及設定詳解。另外,還有一些小細節要注意:

首先,注意admin_variables 裡的 admin_credentials,缺省值是「admin:admin」,表示預設使用者名稱和密碼都是admin,還有mysql_ifaces,其缺省值是「0.0.0.0:6032」,表示監聽所有網路介面的6032 端口,設想你有一個外網能訪問的網絡接口,那麼惡意用戶將能使用缺省的用戶名密碼進入到你的admin 系統,所以不要用預設的用戶名和密碼,也不要缺省監聽外網接口,切記!切記!切記!

其次,注意 mysql_variables 裡的 interfaces,因為PHP 要透過本地的Unix Domain Socket 來請求ProxySQL 的連接池,所以interfaces 不要使用ip:port 的形式,而是設定成本地Unix Domain Socket 的形式,本例設定為/var/run/proxysql.sock,需要提醒的是很多人喜歡把Socket 檔案放到/tmp 路徑下,這不是一個好習慣,畢竟/tmp 從名字上看就不像是一個良家婦女,大家都想弄兩下,搞不好誰        rm 了一下就糟了。

最後,注意 mysql_variables 裡的 monitor_username 和 monitor_password,它設定了監控用戶的相關信息,以便ProxySQL 隨時掌握後端MySQL 伺服器的狀態,一定要記得提前在後端MySQL 伺服器上建立對應的帳號,我一開始就沒建立監控帳號,結果ProxySQL 運作一段時間就沒回應了,這是因為當ProxySQL 不斷用設定裡的監控帳號和密碼嘗試去存取後端伺服器的時候,會產生很多「Access denied for user 'monitor'@'…'”的錯誤,當達到一定閾值,就會導致“Host '…' is blocked because of many connection errors”,此時ProxySQL 就無法響應請求了,必須在MySQL 上“mysqladmin flush-hosts」才行。相關的日誌資訊可以在「SELECT * FROM monitor.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 得到了大約1500 的RPS,透過ProxySQL 得到了大約2000 的RPS,也就是說,ProxySQL 帶來了25% 的效能提升。

想了解更多相關文章,請關注php mysql欄位!

#

以上是詳解透過ProxySQL提升PHP/MySQL的效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:juejin。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具