MySQL DBA
分类: Mysql/postgreSQL
2013-03-07 13:11:31
最近阅读完innodb的手册,随手记下的笔记:
1.索引问题。primary key (clustered index)存放数据 secondary key 存放索引和主键值
a.创建innodb表时指定primary key,unique index。若不指定,在后期增加主键时,innodb需要去判断该列值是否有 null值,且需要建立新表来拷贝源表数据,并需重建所有二级索引。对于unique index 需要去判断是否有重复值。
b.外键的更改,子表将被拷贝到临时文件,重建索引,然后替换旧表
2.压缩表。
a.压缩表只对独立表空间起作用,配置文件中innodb_file_format启用新的文件格式。在create table 或者altertable 语句中指定ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1。
b.适用于主读业务的表,COMPRESS_OPS_OK/COMPRESS_OPS 如果压缩比比较高,说明运行良好,如果低,则需调整压缩参数
c.innodb 通过modification log来避免不必要的解压和压缩工作。日志空间满时,innodb解压该页,进行更改操作后重新压缩。
如果刷新日志失败,将回滚直到更新操作成功。
3.文件格式 Antelope Barracuda ?、
4.变长字段的存储(blob,varchar)。
Antleonpe中,变长字段不超过768B,将存在b-tree中,反之,存储在overflow 页。
barracuda中,变长字段存储在fully off-pages
5.information_schema
innodb_cmp 统计压缩和解压信息 innodb_cmp_reset 实时压缩和解压信息
INNODB_CMPMEM INNODB_CMPMEM_RESET 内存使用统计
innodb_trx 记录innodb中当前执行的事物:锁等待,具体的sql
innodb-locks 记录innodb中锁的等待具体信息
innodb_lock_waits innodb中锁、线程的对照关系
6 innodb 特性
fast locking
使用系统内存分配器 innodb_use_sys_malloc=1(默认),1使用系统内存适配器,0使用innodb自己的缓存适配器
insert buffer innodb_change_buffering none:不缓存 inserts:默认,缓存插入数据 可动态改变参数,对新的线程有效
adaptive hash index 对缓存中得表频繁访问的索引创建hash索引 innodb_adaptive_hash_index
并发控制 innodb_thread_concurrency 并发数上限innodb_thread_sleep_delay 队列等待时间
read ahead 预读 innodb_read_ahead_threshold 触发预读算法的连续页数量取值0到64
I/O线程 innodb_read_io_threads innodb_write_io_threads 后台读写线程数 可动态改变
主线程IO innodb_io_capacity动态设置,数值大致为系统IO量,默认200
dirty pages flush 数据页的刷新 innodb_max_dirty_pages_pct innodb_adaptive_flushing 动态设置 自适应刷新算法
spin poll innodb_spin_wait_delay default 6
insert point innodb_old_blocks_pct 指定新数据写入lru队列的相对位置(37) innodb_old_blocks_time
7动态设置参数:
innodb_file_per_table 表数据和索引存放方式
innodb_stats_on_metadata 元数据的聚集
innodb_lock_wait_timeout 事物等待源数据时间
innodb_adaptive_hash_index 自适应索引
truncate table 删除和重建表
strict mode 严格模式
show engine innodb mutex 显示innodb锁状态
innodb 的安装,升级,降级,