从其他数据库迁移到MySQL

Oracle,SQL Server迁移到MySQL

 

一些变化

    不再使用存储过程、视图、定时作业

    表结构变更,如采用自增id做主键,以及其他语法变更

    业务SQL改造,不使用窗口函数、CTE等功能

    制定MySQL业务开发规范

数据迁移

    MySQL Workbench、Navicat

    OGG

    ODBC/JDBC

    dataX

    otter + canal

    全量一次复制 + 增量变化应用

数据校验

    yugong (for Oracle)

 

理解MySQL特点

单进程,多线程

在超高并发情况下,对多核CPU的利用不足

不使用MySQL5.1以前版本,多核CPU利用差

MySQL新版本高并发可以很好利用多核CPU

每个连接只能用到一个逻辑CPU

每个Query/SQL只能用到一个逻辑CPU

使用/优化建议

    使用新版本,抛弃旧版本

    用高主频,多核CPU

    不跑复杂SQL

    事务及早结束

 

InnoDB buffer pool (简称IBP)是最大的内存单元

    innodb_buffer_pool_free,innodb_buffer_pool_wait_free,innodb_buffer_pool_pages_dirty

MySQL5.7起可在线调整IBP

每个session(连接/会话)分配sort/join/read buffer/tmp table

使用/优化建议

    IBP一般设置物理内存的50%~70%

    加大物理内存,减少物理I/O,提高TPS

    session级buffer按需分配,因此适当就好,无需过大

    所谓的高速查询缓存反倒是影响并发性能的鸡肋,直接禁用

    随着MyISAM逐步被抛弃,key buffer只需设置非常小

 

磁盘I/O是数据库应用场景最大的瓶颈

OLTP业务场景中,绝大多数是随机I/O读写

UNDO log以顺序写、随机读为主

REDO log、binlog、relay log以顺序写、顺序读为主

使用/优化建议

    加大物理内存,减少物理I/O

    采用高速磁盘设备

    适当创建索引,减少随机读

 

不存图片、文件、长文本等大对象数据

不跑复杂SQL,表达式运算、函数运算等

不跑长事务

不跑全文检索

不支持bitmap索引

不支持hash join

MySQL8.0之前不支持统计直方图