存储引擎优化
一、myisam存储引擎优化
1.索引缓存优化
1.1myisam存储引起实现机制及索引文件的存放格式
.myi文件中
头(四部分信息)紧跟索引数据信息
索引数据以Block(page)为最小单位
Index Block ---->逻辑上组织形式
物理上是以File Block存储磁盘
Key Cache中缓存的索引信息是以Cache Block形式组织存放的。
query读数据的过程 看图
1.2 MyISAM存储引擎索引缓存相关的参数
a.key_buffer_size----->索引缓存大小 (KeyCache大小)
三个指标 系统索引的总大小、可用物理内存、系统当前的key cache命令率
可以参考官方手册提供的一个粗略计算的公式:
Key_Size = key_number * (key_length+4)/0.67
Max_keyBuffer_size < Max_RAM-QCache_Usage-Threads_Usage-System_Usage
Thread_Usage = max_connections*(sort_buffer_size+join_buffer_size+read_buffer_size+read_rnd_buffer_size+thread_Stack)
查看Key Cache相关的状态变量:
show status like 'key%';
| Key_blocks_not_flushed | 0 |
| Key_blocks_unused | 45920 |
| Key_blocks_used | 0 |
| Key_read_requests | 0 |
| Key_reads | 0 |
| Key_write_requests | 0 |
| Key_writes | 0 |
+------------------------+-------+
将来可以通过这些参数计算命中率等信息
Key_buffer_Read_HitRatio = (1-Key_reads/key_read_requests)*100%
Key_buffer_Writer_HitRatio = (1-key_writes/key_writer_requests)*100%;
Key_buffer_UsageRatio = (1-key_blocks_used/(key_blocks_used+key_block_unused))*100%
b.key_buffer_block_size 索引缓存中的cache_block_size
key_cache_divsion_limit
---->Hot Area / Warm Area
---->划分该范围比例的,默认是100,只有Warm Area 可以1到100
1.3 NULL值对信息统计的影响。
myisam_stats_method = nulls_equal 认为每个null值都一样。
nulls_unequal
1.4 表读取缓存优化
read_buffer_size Sequential Scan方式扫描数据时使用的buffer
read_rnd_buffer_size Random Scan方式时使用的buffer
淘宝站当中 读数据的库核心主要是用mysql的myisam存储引擎
二、Innodb存储引擎优化
1.innodb_buffer_pool_size参数的设置
该参数对innodb存储引擎的性能有决定的影响。
很多介绍都直接说设置在物理内存的50%到80%
应该更严谨一些
总内存-独占内存-适当冗余
假设单独MySql使用的主机,物理总内存8GB同时使用了MyISam存储引擎
内存如何分配
a)系统冗余:800M
b)myisam :1.5G
c)线程独占部分500个连接*(1mb+1mb+1mb+512kb+512kb)--->2G
sort_buffer_size 1m
join_buffer_size 1m
read_buffer_size 1m
read_rnd_buffer_size 512kb
thread_stack 512kb
innodb_buffer_pool_size = 8G-1.5G-2G-800M=3.7G
show status like 'innodb_buffer_pool%';查看跟innodb_buffer_pool_size相关的参数
2.innodb_log_buffer_size
3.事务优化
事务隔离级别等基础知识 了解
innodb_flush_log_at_trx_commit
有三个值0 , 1,2
4.数据存储优化
主键字段存储空间越小越好
表的创建尽量自己指定相应的主键
主键不要更新
进可能提供主键查询