SQL优化及多数据库支持分享(七)

150 阅读2分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

数据库服务器优化

1、优化服务器硬件

​ 数据库服务器的硬件性能直接决定着数据库的性能,硬件的性能瓶颈,直接影响数据库的运行速度和响应效率。 ​ 我们需要从以下几个方面着手考虑: ​ 1、 配置大内存。足够大的内存,是提高数据库性能的方法之一。因为内存的 IO 比机械硬盘快的多,可以增加系统的缓冲区容量,使数据在内存停留的时间更长,以减少磁盘的 IO次数; ​ 2、 配置高速硬盘,比如固态硬盘 - SSD; ​ 3、 合理分配磁盘 IO,把磁盘 IO 分散到多个设备上,减少资源的竞争,提高并行操作能力; ​ 4、 提高CPU核心数,比如:MySQL 是多线程的数据库,多处理器可以提高同时执行多个线程的能力;

2、优化MySQL参数

​ 通过优化 MySQL 的配置参数来提高服务器资源利用率,从而达到提高 MySQL 服务器性能的目的。MySQL 的配置参数都在 my.conf 或者 my.ini 文件的[mysqld]组下,常用的参数如下:

image-20211117222058424.png image-20211117222122939.png

3、发现系统运行缓慢,如何定位和分析慢的SQL

​ 1、开启 mysql 慢查询日志,定位出查询较慢的 sql 语句(通常来说相应时间超过100ms即为慢SQL); ​ 2、查看SQL的执行接话,使用 EXPLAIN 关键字可以清晰的了解到MySQL 是如何处理 SQL 语句的、索引主键被如何利用的、数据表是如何被搜索和排序的等等; ​ 3、可以在代码中使用 AOP对每个持久层的 dao方法打印执行时间,将所有执行时间较长的 sql 语句进行预警;

4、使用测试工具mysqlslap

mysqlslap -h 数据库IP -uroot --auto-generate-sql --concurrency 20 --iterations 1 --create-schema=big_data

--query='select * from test limit 1

其中各个参数的含义为:

​ 1、concurrency:代表并发数量,多个可以用逗号隔开,比如concurrency=10,50,100, 并发连接线程数分别是 10、50、100 个并发;

​ 2、engines:表示要测试的引擎,可以写多个,用分隔符隔开;

​ 3、iterations:表示测试多少次;

​ 4、auto-generate-sql:代表使用系统生成的SQL脚本来测试;

​ 5、auto-generate-sql-load-type:代表要测试的是读还是写还是两者混合的;

​ 6、number-of-queries:代表总共要运行多少次查询;

​ 7、debug-info:代表额外输出CPU以及内存的相关信息;