MySQL配置简单优化与读写测试
测试方法
- 先使用
sysbench对默认配置的MySQL单节点进行压测,单表数据量为100万,数据库总数据量为2000万,每次压测300秒。
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 \
--mysql-host=192.168.0.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 \
--mysql-db=benchtest --tables=20 \
--table_size=1000000 oltp_read_write --db-ps-mode=disable run
- 再增加innodb缓存池大小。对于单机只跑MySQL的服务器,业界一般设置为系统内存的70%左右。比如总内存64G的服务器,innodb缓存池大小可以设置为45G。该参数可以动态设置,不需要重启MySQL。
- 在修改innodb缓存池大小之后,修改读写IO的线程数加起来等于CPU核心数。比如CPU核心数为16,则读IO线程数修改为8,写IO线程数修改为8。该配置只能修改配置文件,不能动态配置。
检查当前配置
-- innodb缓冲池大小
SHOW VARIABLES LIKE "%innodb_buffer_pool_size";
-- change_buffer在缓冲池的占用比
SHOW VARIABLES LIKE "%innodb_change_buffer_max_size";
-- innodb的读io线程数
SHOW VARIABLES LIKE "%innodb_read_io_threads";
-- innodb的写io线程数
SHOW VARIABLES LIKE "%innodb_write_io_threads";
-- 查看innodb脏页刷新线程数
SHOW VARIABLES LIKE "%innodb_page_cleaners";
SHOW GLOBAL STATUS LIKE "innodb%wait_free";
-- 查询缓存是否开启
SHOW VARIABLES LIKE "%query_cache_type";
修改配置
-- 增大innodb缓冲池大小为5G
SET GLOBAL innodb_buffer_pool_size = 5368709120;
-- 读写IO线程数只能修改配置文件重启MySQL才能生效
测试
- 默认配置。innodb_buffer_pool默认只有128MB,读写线程数分别为4。
# SQL执行统计
SQL statistics:
queries performed:
read: 89432 # 读SQL数
write: 25552 # 写SQL数
other: 12776
total: 127760 # 总SQL数
transactions: 6388 (21.23 per sec.)
queries: 127760 (424.70 per sec.) # 平均每秒执行424.70条SQL
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 300.8215s
total number of events: 6388
Latency (ms):
min: 27.55
avg: 470.25
max: 1907.78
95th percentile: 943.16
sum: 3003956.97
Threads fairness:
events (avg/stddev): 638.8000/5.72
execution time (avg/stddev): 300.3957/0.14
- 增大innodb_buffer_pool到5G。读SQL执行数增长63.8%,写SQL执行数增长63.8%,总执行SQL数增长63.8%,完成总事件数增长63.8%。相较于默认配置,性能提升63.8%。
SQL statistics:
queries performed:
read: 146468
write: 41848
other: 20924
total: 209240
transactions: 10462 (34.79 per sec.)
queries: 209240 (695.78 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 300.7235s
total number of events: 10462
Latency (ms):
min: 33.13
avg: 287.15
max: 1199.81
95th percentile: 559.50
sum: 3004126.18
Threads fairness:
events (avg/stddev): 1046.2000/6.38
execution time (avg/stddev): 300.4126/0.10
- 再将读写IO线程各改为12。性能提升相较于增加innodb缓存池5G,增长52.3%;相较于默认配置,增长149.4%。
SQL statistics:
queries performed:
read: 223020
write: 63720
other: 31860
total: 318600
transactions: 15930 (53.08 per sec.)
queries: 318600 (1061.64 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 300.0967s
total number of events: 15930
Latency (ms):
min: 27.77
avg: 188.37
max: 1133.24
95th percentile: 467.30
sum: 3000790.02
Threads fairness:
events (avg/stddev): 1593.0000/13.57
execution time (avg/stddev): 300.0790/0.01
其它
还有chenge_buffer和脏页刷新线程数可优化,但未详细测试。
MySQL配置简单优化与读写测试的更多相关文章
- MySQL 配置参数优化
MySQL 配置参数优化 1.修改back_log参数值:由默认的50修改为500 back_log=500back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中 ...
- Nginx配置性能优化与压力测试webbench【转】
这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...
- mysql的简单优化【简单易学】
1.选取最适用的字段属性: 表字段尽量设小,不要给数据库增加没必要的空间:如:值为'01'.'02',给char(2)即可: 2.使用连接(JOIN)来代替子查询(Sub-Queries): 使用jo ...
- mysql 的简单优化
合理的建立索引的建议: (1) 越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间,处理起来更快. (2) 简单的数据类型更好:整型数据比起字符,处理开销更小,因 ...
- MySQL初始化简单优化
1,yum 2,源码 3,二进制 4,源码+yum 不管哪种方式装完成数据库,都需要对数据库做一些优化. 优化数据库 mysql> select host,user from mysql.us ...
- MySQL的简单优化
一.如何发现需要优化的SQL 主要使用MySQL的慢查日志对有效率问题的SQL进行监控 第一步:启动慢查日志的监控 打开开关,将未使用索引的查询记录到慢查日志中 设置查询时间,当查询时间大于这个值,就 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.
一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 100 ...
- MySql配置优化总结
当我们被人雇来监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议.许多人在事后都非常惊讶,因为我们建议他们仅仅改动几个设置,即使是这里有好几百个配置项.这篇文章的目的在于 ...
- mysql简单优化的一些总结
mysql对cpu的利用特点: 5.1之前,多核支持较弱:5.1可利用4个核:5.5可利用24核:5.6可利用64个核:每个连接对应一个线程,每个并发query只能使用一个核 mysql对内存的利用特 ...
随机推荐
- Python定时任务框架apscheduler的简单使用
apscheduler的简单使用 APScheduler有四大组件: 1.触发器 triggers : 触发器包含调度逻辑.每个作业都有自己的触发器,用于确定下一个任务何时运行.除了初始配置之外,触发 ...
- 解决 Python 的字符串 center ljust rjust 在面对中文时的 bug
方法一:修改内置 str 的方法,能更灵活的定制,更准确地判断 CJK 字符,全局有效.甚至还能把转义序列也兼容了. def modify_str(): import gc, ctypes def c ...
- 2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是
2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是 ...
- Django-3:创建子项目APP
django-admin startapp app01 或 python manage.py startapp app01 #app01 是app名称 PyCharm的样子:
- 2015年蓝桥杯C/C++大学B组省赛真题(星系炸弹)
题目描述: 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸. 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在 ...
- 域名配置动态代理后,为什么每次 ping 还是相同的 ip?
当你配置了域名的动态代理后,ping 命令所显示的 IP 地址不会随着代理服务器的变化而变化. 这是因为 ping 命令使用了 DNS 缓存,它会将域名解析结果缓存到本地,直到缓存过期或者手动清除缓存 ...
- K8S 证书详解(认证)
K8S 证书介绍 在 Kube-apiserver 中提供了很多认证方式,其中最常用的就是 TLS 认证,当然也有 BootstrapToken,BasicAuth 认证等,只要有一个认证通过,那么 ...
- 用 Python + turtle 模块绘制五星红旗
用 Python 绘制五星红旗 在这个代码示例中,我将介绍如何使用 Python 的 turtle 模块绘制五星红旗.turtle 模块是一个图形库,可以轻松地在 Python 中实现简单的绘图功能. ...
- CKS 考试题整理 (03)-kube-bench 修复不安全项
Context 针对 kubeadm 创建的 cluster 运行 CIS 基准测试工具时,发现了多个必须立即解决的问题. Task 通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效. 修 ...
- 安装部署 Kubernetes 仪表板(Dashboard)
简介 Kubernetes 仪表板(Dashboard)是基于网页的 Kubernetes 用户界面. 你可以使用仪表板: 展示了 Kubernetes 集群中的资源状态信息和所有报错信息. 把容器应 ...