高性能MYSQL读书笔记

高性能MYSQL读书笔记
隔离级别

  • READ UNCOMMITTED隔离级别 读取未提交内容 在这个级别下所有事物都能看到未提交的事务执行结果,容易引起脏读
  • READ COMMITTED 读取提交内容(mysql 非默认)只能读取提交后的事务结果
  • REPEATABLE READ (Mysql 默认)可重复读 保证在一个事务下的多个实例读取到相同内容,可能会出现幻读, mysql InnoDB 和 Falcon 引擎解决来幻读问题
  • SERIALIZABLE 可串行化 最高的事物级别 对每个事务加锁。强制事物排序

1  隔离级别                       脏读(Dirty Read)          不可重复读(NonRepeatable Read)          幻读(Phantom Read)
2  读未提交(Read uncommitted)     可能                         可能                                     可能
3  读已提交(Read committed)       不可能                       可能                                     可能
4  可重复读(Repeatable read)      不可能                       不可能                                   可能
5  可串行化(Serializable )        不可能                       不可能                                   不可能

MySQL 事务
  • Mysql 默认提交数据的 AUTOCOMMIT ON
  • InnoDB 行级别锁 多版本并发控制,NDB Cluster Falcon 是事务型 MyISAM 是非事务的 表级别锁,在混合事务的时候不能保证数据一致性
  • InnoDB 使用二相锁定协议 一个事务在执行的时候会获得锁,在commit 或者rollback的时候释放锁,可以显示制定锁 例如 LOCK IN SHARE MODE ,FOR UPDATE

查看 表的状态
show table status like '表名'

MyISAM MySQL 默认的数据库引擎 不支持事务和行级锁

表转换
alter table方式 alter table mytable engine = innoDB; 复制表

打开MySql慢查询日志
修改my.conf
#打开慢查询
log-slow-queries 
=  <file_name>
#记录查询大于2秒的记录, 默认是10秒
long_query_time 
=   2
#记录没有使用索引的查询
log-queries-not-using-indexes
#记录运行较慢的管理命令
log-slow-admin-statements
  • 取查看MySql 数据库状态 show status show processlist
  • FLUSH STATUS 刷新状态
  • SQL_NO_CACHE MySql 不会缓存结果 例如 select sql_no_cache * from admin_user
  • show profile cpu for query 1 ; 查看用户查询CPU使用率
选择优化的数据类型
  • 更小通常更好,正确的存储和表示数据的最小类型,更小的数据类型通常更快,更少的使用存储空间 内存和CPU缓存
  • 简单就好 越简单的数据类型需要的CPU周期越少
  • 尽量避免NULL
  • 整数 数据类型包括 TINYINT(8) SMALLINT(16) MEDIUMINT(24) INT(32) BIGINT(64),所有类型都包含UNSIGNED熟悉 ,表示不允许为负数,并且正数上限提高一倍
  • 实数FLOAT(4) DOUBLE(8) 保存精确的小数 DECIMAL可以定义精度 比如DECIMAL(8,2)会在小数点前保留6位,后2位
  • 字符串类型p66

你可能感兴趣的:(高性能MYSQL读书笔记)