mysql设置取值范围0到100_MySQL调优优化的100个建议⽂章⽬录
[隐藏]
MySQL监控MySQL服务器硬件和OS(操作系统)调优
MySQL 配置
查询优化
MySQL备份过程
MySQL是⼀个强⼤的开源数据库。随着MySQL上的应⽤越来越多,MySQL逐渐遇到了瓶颈。这⾥提供 101 条优化 MySQL 的建议。有些技巧适合特定的安装环境,但是思路是相通的。我已经将它们分成了⼏类以帮助你理解。
MySQL监控MySQL服务器硬件和OS(操作系统)调优
1、有⾜够的物理内存,能将整个InnoDB⽂件加载到内存⾥ —— 如果访问的⽂件在内存⾥,⽽不是在磁盘上,InnoDB会快很多。
2、全⼒避免 Swap 操作 — 交换(swapping)是从磁盘读取数据,所以会很慢。
3、使⽤电池供电的RAM(Battery-Backed RAM)。
4、使⽤⼀个⾼级磁盘阵列 — 最好是 RAID10 或者更⾼。
5、避免使⽤RAID5 — 和校验需要确保完整性,开销很⾼。
6、将你的操作系统和数据分开,不仅仅是逻辑上要分开,物理上也要分开 — 操作系统的读写开销会影响数据库的性能。
mysql是什么系统7、将临时⽂件和复制⽇志与数据⽂件分开 — 后台的写操作影响数据库从磁盘⽂件的读写操作。
8、更多的磁盘空间等于更⾼的速度。
9、磁盘速度越快越好。
10、SAS优于SATA。
11、⼩磁盘的速度⽐⼤磁盘的更快,尤其是在 RAID 中。
12、使⽤电池供电的缓存 RAID(Battery-Backed Cache RAID)控制器。
13、避免使⽤软磁盘阵列。
14、考虑使⽤固态IO卡(不是磁盘)来作为数据分区 — ⼏乎对所有量级数据,这种卡能够⽀持 2 GBps 的写操作。
15、在 Linux 系统上,设置 swappiness 的值为0 — 没有理由在数据库服务器上缓存⽂件,这种⽅式在Web服务器或桌⾯应⽤中⽤的更多。
16、尽可能使⽤ noatime 和 nodirtime 来挂载⽂件系统 — 没有必要为每次访问来更新⽂件的修改时间。
17、使⽤ XFS ⽂件系统 — ⼀个⽐ext3更快的、更⼩的⽂件系统,拥有更多的⽇志选项,同时,MySQL在ext3上存在双缓冲区的问题。
18、优化你的 XFS ⽂件系统⽇志和缓冲区参数 – -为了获取最⼤的性能基准。
19、在Linux系统中,使⽤ NOOP 或 DEADLINE IO 调度器 — CFQ 和 ANTICIPATORY 调度器已经被证明⽐ NOOP 和 DEADLINE 慢。
js 数组清空20、使⽤ 64 位操作系统 — 有更多的内存能⽤于寻址和 MySQL 使⽤。
21、将不⽤的包和后台程序从服务器上删除 — 减少资源占⽤。
22、将使⽤ MySQL 的 host 和 MySQL⾃⾝的 host 都配置在⼀个 host ⽂件中 — 这样没有 DNS 查。
23、永远不要强制杀死⼀个MySQL进程 — 你将损坏数据库,并运⾏备份。
24、让你的服务器只服务于MySQL — 后台处理程序和其他服务会占⽤数据库的 CPU 时间。
异步fifo错bitMySQL 配置
25、使⽤ innodb_flush_method=O_DIRECT 来避免写的时候出现双缓冲区。
26、避免使⽤ O_DIRECT 和 EXT3 ⽂件系统 — 这会把所有写⼊的东西序列化。
27、分配⾜够 innodb_buffer_pool_size ,来将整个InnoDB ⽂件加载到内存 — 减少从磁盘上读。
28、不要让 innodb_log_file_size 太⼤,这样能够更快,也有更多的磁盘空间 — 经常刷新有利降低发⽣故障时的恢复时间。
29、不要同时使⽤ innodb_thread_concurrency 和 thread_concurrency 变量 — 这两个值不能兼容。
30、为 max_connections 指定⼀个⼩的值 — 太多的连接将耗尽你的RAM,导致整个MySQL服务器被锁定。
31、保持 thread_cache 在⼀个相对较⾼的数值,⼤约是 16 — 防⽌打开连接时候速度下降。
32、使⽤ skip-name-resolve — 移除 DNS 查。
33、如果你的查询重复率⽐较⾼,并且你的数据不是经常改变,请使⽤查询缓存 — 但是,在经常改变的数据上使⽤查询缓存会对性能有负⾯影响。
34、增加 temp_table_size — 防⽌磁盘写。
35、增加 max_heap_table_size — 防⽌磁盘写。
36、不要将 sort_buffer_size 的值设置的太⾼ — 可能导致连接很快耗尽所有内存。
37、监控 key_read_requests 和 key_reads,以便确定 key_buffer 的值 — key 的读需求应该⽐ key_reads 的值更⾼,否则使⽤
key_buffer 就没有效率了。
38、设置 innodb_flush_log_at_trx_commit = 0 可以提⾼性能,但是保持默认值(1)的话,能保证数据的完整性,也能保证复制不会滞后。
39、有⼀个测试环境,便于测试你的配置,可以经常重启,不会影响⽣产环境。
MySQL Schema 优化:
40、保证你的数据库的整洁性。
sqlserver怎么备份数据库41、归档⽼数据 — 删除查询中检索或返回的多余的⾏
42、在数据上加上索引。
43、不要过度使⽤索引,评估你的查询。
44、压缩 text 和 blob 数据类型 — 为了节省空间,减少从磁盘读数据。
45、UTF 8 和 UTF16 ⽐ latin1 慢。
46、有节制的使⽤触发器。
47、保持数据最⼩量的冗余 — 不要复制没必要的数据.
48、使⽤链接表,⽽不是扩展⾏。
49、注意你的数据类型,尽可能的使⽤最⼩的。
50、如果其他数据需要经常需要查询,⽽ blob/text 不需要,则将 blob/text 数据域其他数据分离。
51、经常检查和优化表。
52、经常做重写 InnoDB 表的优化。
53、有时,增加列时,先删除索引,之后在加上索引会更快。
54、为不同的需求选择不同的存储引擎。
55、⽇志表或审计表使⽤ARCHIVE存储引擎 — 写的效率更⾼。
56、将 session 数据存储在 memcache 中,⽽不是 MySQL 中 — memcache 可以设置⾃动过期,防⽌MySQL对临时数据⾼成本的读写操作。
57、如果字符串的长度是可变的,则使⽤VARCHAR代替CHAR — 节约空间,因为CHAR是固定长度,⽽VARCHAR不是(utf8 不受这个影响)。
58、逐步对 schema 做修改 — ⼀个⼩的变化将产⽣的巨⼤的影响。
59、在开发环境测试所有 schema 变动,⽽不是在⽣产环境的镜像上去做。
60、不要随意改变你的配置⽂件,这可能产⽣⾮常⼤的影响。
61、有时候,少量的配置会更好。
62、质疑使⽤通⽤的MySQL配置⽂件。
exploit database查询优化
63、使⽤慢查询⽇志,出执⾏慢的查询。
64、使⽤ EXPLAIN 来决定查询功能是否合适。
65、经常测试你的查询,看是否需要做性能优化 — 性能可能会随着时间的变化⽽变化。
66、避免在整个表上使⽤count(*) ,它可能会将整个表锁住。
67、保持查询⼀致,这样后续类似的查询就能使⽤查询缓存了。
68、如果合适,⽤ GROUP BY 代替 DISTINCT。
69、在 WHERE、GROUP BY 和 ORDER BY 的列上加上索引。
70、保证索引简单,不要在同⼀列上加多个索引。
71、有时,MySQL 会选择错误的索引,这种情况使⽤ USE INDEX。
72、使⽤ SQL_MODE=STRICT 来检查问题。
百度站长平台网页版73、索引字段少于5个时,UNION 操作⽤ LIMIT,⽽不是 OR。
74、使⽤ INSERT ON DUPLICATE KEY 或 INSERT IGNORE 来代替 UPDATE,避免 UPDATE 前需要先 SELECT。
75、使⽤索引字段和 ORDER BY 来代替 MAX。
76、避免使⽤ ORDER BY RAND()。
77、LIMIT M,N 在特定场景下会降低查询效率,有节制使⽤。
78、使⽤ UNION 来代替 WHERE ⼦句中的⼦查询。
79、对 UPDATE 来说,使⽤ SHARE MODE 来防⽌排他锁。
80、重启 MySQL 时,记得预热数据库,确保将数据加载到内存,提⾼查询效率。
81、使⽤ DROP TABLE ,然后再 CREATE TABLE ,⽽不是 DELETE FROM ,以删除表中所有数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论