Mysql数据库的优化总结
发布日期:2016-4-19 16:4:47
Mysql数据库的优化总结 说明:本文的环境为CENTOS 5.5 64 Bit /Mysql 5.1.50 本文简介:使用Mysql有一段时间了,在这期间做了不少关于Mysql优化、设计与维护的工作,所以这两天有时间做一下简单的总结,既方便自己回忆,同时也希望能给大家带来点帮助. 一 硬件配置优化
二 操作系统级优化 图1 3. 优化内核参数 net.ipv4.tcp_keepalive_time=7200 net.ipv4.tcp_max_syn_backlog=1024 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.neigh.default.gc_thresh3 = 2048 net.ipv4.neigh.default.gc_thresh2 = 1024 net.ipv4.neigh.default.gc_thresh1 = 256 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.forwarding = 1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.tcp_syncookies = 1 net.core.netdev_max_backlog = 2048 net.core.dev_weight = 64 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_rfc1337 = 1 net.ipv4.tcp_sack = 0 net.ipv4.tcp_fin_timeout = 20 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_max_orphans = 32768 net.core.optmem_max = 20480 net.core.rmem_default = 16777216 net.core.rmem_max = 16777216 net.core.wmem_default = 16777216 net.core.wmem_max = 16777216 net.core.somaxconn = 500 net.ipv4.tcp_orphan_retries = 1 net.ipv4.tcp_max_tw_buckets = 18000 net.ipv4.ip_forward = 0 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.conf.all.rp_filter = 1 kernel.sysrq = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.ip_local_port_range = 5000 65000 kernel.shmmax = 167108864 vm.swappiness=0 4.加大文件描述符限制,代码如下所示 Vim /etc/security/limits.conf 加上 * soft nofile 65535 * hard nofile 65535 5. 文件系统选择 xfs 图2 三 Mysql设计优化 1.存储引擎的选择 以下列出了两者的优缺点:
2.命名规则
3.字段类型选择 字段类型的选择的一般原则为以下两点:
原因:更小的字段类型更小的字符数占用更少的内存,占用更少的磁盘空间,占用更少的磁盘IO,以及占用更少的带宽。 3.1 整型: 见图3所示: 图3 根据满足需求的最小整数为选择原则,能用INT的就不要用BIGINT。 用无符号INT存储IP,而非CHAR(15)。 3.2 浮点型:类型字节精度类型使用场景 图4 3.3 时间类型类型取值范围存储空间零值表示法 如图5所示: 图5 III.3.4 字符类型类型最大长度占用存储空间 如图6所示 图6 注释:L表示可变长度的意思 对于varchar和char的选择要根据引擎和具体情况的不同来选择,主要依据的是如下原则:
4.编码选择
若含有中文字符的话最好都统一采用utf8类型,避免乱码的情况发生。 5. 主键选择原则 注释:这里说的主键设计主要是针对INNODB引擎
推荐采用数值类型做主键并采用auto_increment属性让其自动增长。 6.其他需要注意的地方 1. ØNULL OR NOT NULL 尽可能设置每个字段为NOT NULL,除非有特殊的需求,原因为如下3点:
2. 索引
添加索引有如下原则:
3. 反范式设计 适当的使用冗余的反范式设计,以空间换时间有的时候会有很高的效率。 四 Mysql软件优化
五 Mysql配置优化 注意:全局参数一经设置,随服务器启动预占用资源。 1. key_buffer_size参数 mysql索引缓冲,如果是采用myisam的话要重点设置这个参数,根据(key_reads/key_read_requests)判断 2.innodb_buffer_pool_size参数 INNODB 数据、索引、日志缓冲最重要的引擎参数,根据(hit riatos和FILE I/O)判断 3.wait_time_out参数 线程连接的超时时间,尽量不要设置很大,推荐10s 4. max_connections参数 服务器允许的最大连接数,尽量不要设置太大,因为设置太大的话容易导致内存溢出,需要通过以下所示的公式来确定: 图7 5. thread_concurrency参数 线程并发利用数量,(cpu+disk)*2,根据(os中显示的请求队列和tickets)判断 6. sort_buffer_size参数 获得更快的--ORDER BY,GROUP BY,SELECT DISTINCT,UNION DISTINCT 7. read_rnd_buffer_size参数 当根据键进行分类操作时获得更快的--ORDER BY 8. join_buffer_size参数 join连接使用全表扫描连接的缓冲大小,根据select_full_join判断 9. read_buffer_size参数 全表扫描时为查询预留的缓冲大小,根据select_scan判断 10. tmp_table_size参数 临时内存表的设置,如果超过设置就会转化成磁盘表,根据参数(created_tmp_disk_tables)判断 11. innodb_log_file_size参数(默认5M) 记录INNODB引擎的redo log文件,设置较大的值意味着较长的恢复时间。 12. innodb_flush_method参数(默认fdatasync) Linux系统可以使用O_DIRECT处理数据文件,避免OS级别的cache,O_DIRECT模式提高数据文件和日志文件的IO提交性能 13. innodb_flush_log_at_trx_commit(默认1)
六、 Mysql语句级优化
下一条: MySQL优化参考
|