内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

詳解通過ProxySQL提升PHP/MySQL的性能

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

前些天我介紹了如何通過 Twemproxy 實現(xiàn) Redis 連接池,進而提升 PHP/Redis 的性能。今天我要介紹一下 ProxySQL,通過它可以實現(xiàn) MySQL 連接池,進而提升 PHP/MySQL 的性能,實際上原理是差不多的,本來沒必要再寫一篇文章贅述,不過我在配置使用 ProxySQL 的過程中,遇到了一些小問題,感覺還是應(yīng)該記錄一下。

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的威縣網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

關(guān)于安裝過程,官方 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 = "..."
	}
)

最應(yīng)該注意的是:ProxySQL 使用 SQLite 來保存配置信息,配置文件只在第一次啟動的時候有效,后續(xù)都是從 SQLite 獲取配置。如果你想強制使用配置文件,需要使用 initial 命令。更多信息可以參考:ProxySQL之安裝及配置詳解。此外,還有一些小細節(jié)需要注意:

首先,注意 admin_variables 里的 admin_credentials,缺省值是「admin:admin」,表示缺省用戶名和密碼都是 admin,還有 mysql_ifaces,其缺省值是「0.0.0.0:6032」,表示監(jiān)聽所有網(wǎng)絡(luò)接口的 6032 端口,設(shè)想你有一個外網(wǎng)能訪問的網(wǎng)絡(luò)接口,那么惡意用戶將能使用缺省的用戶名密碼進入到你的 admin 系統(tǒng),所以不要用缺省的用戶名和密碼,也不要缺省監(jiān)聽外網(wǎng)接口,切記!切記!切記!

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

最后,注意 mysql_variables 里的 monitor_username 和 monitor_password,它設(shè)置了監(jiān)控用戶的相關(guān)信息,以便 ProxySQL 隨時掌握后端 MySQL 服務(wù)器的狀態(tài),一定要記得提前在后端 MySQL 服務(wù)器上創(chuàng)建相應(yīng)的帳號,我一開始就沒創(chuàng)建監(jiān)控帳號,結(jié)果 ProxySQL 運行一段時間就沒響應(yīng)了,這是因為當(dāng) ProxySQL 不斷用配置里的監(jiān)控帳號和密碼嘗試去訪問后端服務(wù)器的時候,會生成很多「Access denied for user ‘monitor’@’…’」的錯誤,當(dāng)達到一定閾值,就會導(dǎo)致「Host ‘…’ is blocked because of many connection errors」,此時 ProxySQL 就無法響應(yīng)請求了,必須在 MySQL 上「mysqladmin flush-hosts」才行。相關(guān)的日志信息可以在「SELECT * FROM monitor.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 模擬一個高并發(fā)的場景,壓測看看性能有沒有提升:

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"

最終,我在一臺一般配置的服務(wù)器上,不通過 ProxySQL 得到了大約 1500 的 RPS,通過 ProxySQL 得到了大約 2000 的 RPS,也就是說,ProxySQL 帶來了 25% 的性能提升。

想了解更多相關(guān)文章,敬請關(guān)注php mysql欄目!

網(wǎng)站題目:詳解通過ProxySQL提升PHP/MySQL的性能
地址分享:http://www.rwnh.cn/article34/cgjppe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站App設(shè)計、網(wǎng)站營銷、企業(yè)建站全網(wǎng)營銷推廣、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
葵青区| 柳林县| 平和县| 万年县| 佳木斯市| 岳西县| 重庆市| 阜阳市| 宁明县| 南靖县| 洪泽县| 长春市| 甘德县| 神池县| 潢川县| 东兴市| 吉林市| 改则县| 武平县| 望江县| 高台县| 北流市| 景宁| 石泉县| 洪雅县| 桦甸市| 正镶白旗| 汶上县| 兴国县| 上饶县| 临猗县| 石林| 眉山市| 叶城县| 互助| 绵竹市| 罗田县| 道真| 台中县| 奉贤区| 富宁县|