使用MySQL 8.2透明讀/寫分離,代價幾何?(譯文)
來源:oracleace
摘要:MySQL 8.2引入了透明讀/寫分離功能,MySQL 路由器可以自動將只讀SQL路由到叢集的只讀節點。然而,MySQL路由器在此過程中需要對接收到的SQL進行一定程度的解析,以確定其是否為只讀SQL。這個解析過程對系統效能會有怎樣的影響呢?知名MySQL佈道師Frédéric Descamps對此進行了測試,讓我們一起看看他的分析。
01
—
環境
為了執行測試,我使用以下環境:
Linux Kernel 5.15.0 – aarch64
MySQL Community Server 8.2.0
MySQL Router 8.2.0
sysbench 1.1.0 using LuaJIT 2.1.0-beta3
VM.Standard.A1.Flex – Neoverse-N1 (50 BogoMIPS) 4 cores
24GB of RAM
MySQL InnoDB 叢集在 3 臺機器上執行,一臺機器用於 MySQL 路由器和 Sysbench。
Sysbench 準備了 8 個表,每個表有 100000 條記錄。
MySQL連線使用SSL。
02
—
MySQL InnoDB 叢集
以下是 MySQL Shell 中叢集的概述:
JS > cluster.describe()
{
"clusterName": "myCluster",
"defaultReplicaSet": {
"name": "default",
"topology": [
{
"address": "mysql1:3306",
"label": "mysql1:3306",
"role": "HA"
},
{
"address": "mysql2:3306",
"label": "mysql2:3306",
"role": "HA"
},
{
"address": "mysql3:3306",
"label": "mysql3:3306",
"role": "HA"
}
],
"topologyMode": "Single-Primary"
}
}
JS > cluster.status()
{
"clusterName": "myCluster",
"defaultReplicaSet": {
"name": "default",
"primary": "mysql1:3306",
"ssl": "REQUIRED",
"status": "OK",
"statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
"topology": {
"mysql1:3306": {
"address": "mysql1:3306",
"memberRole": "PRIMARY",
"mode": "R/W",
"readReplicas": {},
"replicationLag": "applier_queue_applied",
"role": "HA",
"status": "ONLINE",
"version": "8.2.0"
},
"mysql2:3306": {
"address": "mysql2:3306",
"memberRole": "SECONDARY",
"mode": "R/O",
"readReplicas": {},
"replicationLag": "applier_queue_applied",
"role": "HA",
"status": "ONLINE",
"version": "8.2.0"
},
"mysql3:3306": {
"address": "mysql3:3306",
"memberRole": "SECONDARY",
"mode": "R/O",
"readReplicas": {},
"replicationLag": "applier_queue_applied",
"role": "HA",
"status": "ONLINE",
"version": "8.2.0"
}
},
"topologyMode": "Single-Primary"
},
"groupInformationSourceMember": "mysql1:3306"
}
還有已經引導到叢集的MySQL路由器,在MySQL路由器中我們可以看到所有的埠:
JS > cluster.listRouters(){ "clusterName": "myCluster", "routers": { "router.sub09280951550.mysqlgermany.oraclevcn.com::system": { "hostname": "router.subXXXXXXX.mysqlgermany.oraclevcn.com", "lastCheckIn": "2023-11-15 09:27:18", "roPort": "6447", "roXPort": "6449", "rwPort": "6446", "rwSplitPort": "6450", "rwXPort": "6448", "version": "8.2.0" } }}
03
—
OLTP 讀/寫
oltp_read_write.lua
指令碼,然後使用 MySQL 路由器的讀/寫專用埠 (埠6446) 再次執行它,最後使用讀/寫拆分埠 (埠6450)。測試使用 8 個執行緒,每次執行 3 次。$ sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql \ --mysql-user=sysbench --mysql-password=XxxxXX --mysql-ssl=REQUIRED \ --mysql-host=<...> --mysql-port=<...> --tables=8 --table-size=100000 \ --threads=8 run
04
—
OLTP 只讀
oltp_read_only.lua
指令碼。再次使用 8 個執行緒和 3 次執行:04
—
OLTP 只寫
oltp_write_only.lua
測試了只寫工作負載。再次 8 個執行緒和 3 次執行:我們可以看到,差異很小,但差異的確存在。
05
—
更復雜的工作負載
oltp_update_non_index.lua
,我們可以看到顯著的差異。06
—
結論
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027826/viewspace-2996093/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql優化之讀寫分離MySql優化
- 探究MySQL MGR的讀寫分離MySql
- MySQL 讀寫分離的好處MySql
- ProxySQL實現MySQL讀寫分離MySql
- 使用ShardingSphere-JDBC完成Mysql的分庫分表和讀寫分離JDBCMySql
- MYSQL 主從 + ATLAS 讀寫分離 搭建MySql
- MySQL cetus 中介軟體 讀寫分離MySql
- 配置\清除 MySQL 主從 讀寫分離MySql
- MySQL 官宣:支援讀寫分離了!!MySql
- mysql讀寫分離的最佳實踐MySql
- Mysql之讀寫分離架構-AtlasMySql架構
- MySQL主從複製讀寫分離MySql
- Mysql 高可用(MHA)-讀寫分離(Atlas)MySql
- 分散式 | 幾步快速擁有讀寫分離分散式
- MySQL 中讀寫分離資料延遲MySql
- docker+atlas+mysql實現讀寫分離DockerMySql
- [Mysql]主從複製和讀寫分離MySql
- Kubernetes 中實現 MySQL 的讀寫分離MySql
- MySQL Route負載均衡與讀寫分離Docker環境使用MySql負載Docker
- 一文解析Redis讀寫分離技術Redis
- 一文淺談“讀寫分離”技術
- SpringBoot使用Sharding-JDBC讀寫分離Spring BootJDBC
- ProxySQL實現Mysql讀寫分離 - 部署手冊MySql
- Mysql-主從複製與讀寫分離MySql
- 搭建MySQL主從實現Django讀寫分離MySqlDjango
- Orchestrator+Proxysql 實現自動導換+應用透明讀寫分離SQL
- ShardingSphere + Mysql,實現分庫分表、讀寫分離,並整合 SpringBootMySqlSpring Boot
- MySQL從庫卡主了--讀寫分離也不能亂讀MySql
- Redis的讀寫分離Redis
- KunlunBase 讀寫分離方案
- Laravel讀寫分離原理Laravel
- 使用ProxySQL實現MySQL Group Replication的故障轉移、讀寫分離(一)MySql
- CentOS7系統下使用Mycat實現mysql讀寫分離部署CentOSMySql
- discuz 配置讀寫分離(主寫從讀)
- 提高效能,MySQL 讀寫分離環境搭建MySql
- Mycat實現mysql的負載均衡讀寫分離MySql負載
- MyCat分庫分表、讀寫分離
- 線上MySQL讀寫分離,出現寫完讀不到問題如何解決MySql