SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
MySQL Handler Socket
               &
    MySQL 5.5 部分新特性介绍

                            完美世界 顾春江
                  guchunjiang@wanmei.com
●    Handler Socket 项目的意义

●    Handler Socket 实现的途径

●    MySQL Plugin 体系简介

●    MySQL 5.5  新引入的 semi­sync  复制

●    MySQL 5.5  值得关注的几个参数及性能变化
                      
Handler Socket  出现的意义


    ●众所周知 RDBMS 的 SQL 引擎存取代价大,对轻量 k/v 
    型数据没有较好的应用模式
     MySQL 和 Memcached 整合后, MC 的数据一致性问
    ●


    题,服务器管理,可用性管理都需要考虑
     Memcached 的持久化问题
    ●


    ●最好有一种方式能跳过 MySQL 耗时的 SQL 语法解析
    器而直接访问存储层
                         
     
性能瓶颈

    ● 对于 k/v 式操作,即使是用了 prepared 
    statement, 或者 query cache 等各种优化,
    每秒执行语句的速度也是 Memcache 的4-5分
    之一左右
     Vmstat 中 user  的 CPU 时间比 sys 时间多不
    ●


    少,因此各种 mutex lock 并非是影响性能的主
    要瓶颈
                      
$mysqlslap --query="select user_name from test.user
where user_id=1000" –number-of-queries=10000000
--concurrency=30 --host=mysql15 -uxxx -p

$mysqladmin extended-status -i 1 -r -uroot | grep -e
"Com_select"

|   Com_select                          |   86234      |
|   Com_select                          |   82345      |
|   Com_select                          |   85972      |
|   Com_select                          |   84270      |
|   Com_select                          |   84281      |
|   Com_select                          |   83951      |
通过正常的 SQL 接口, MySQL 可以达到84 k/s 的读取次数

$ vmstat 1
us sy id wa st
55 36 9 0 0
53 34 13 0 0
                             
vmstat 的 user 时间占了一半多
资源都消耗在哪里

用 OProfile 查看系统调用

samples   %        app name      symbol name
259130    4.5199   mysqld        MYSQLparse(void*)
196841    3.4334   mysqld        my_pthread_fastmutex_lock
106439    1.8566   libc-2.5.so   _int_malloc
67945     1.1851   mysqld        ...make_join...
63435     1.1065   mysqld        JOIN::optimize()
55825     0.9737   vmlinux       wakeup_stack_begin
55054     0.9603   mysqld        MYSQLlex(void*, void*)

  可以看到, SQL 解析相关的调用占了大部分 CPU 时
  间,如果能跳过 SQL 解析层就能好很多
                 
如何降低查询开销

一般 MySQL 客户端进行查询,有如下过程:
● SQL Parser 解析 SQL 语句
● 打开表对象句柄,申请 mutex

● 根据表信息生成 SQL 执行计划

● IO 读写

● 释放 mutex, 关闭表对象句柄




  这5个步骤中,只有第四步是 IO 向的,其余
  都是 CPU 向。  
MySQL 为能够自定义存储引擎,有一个 Handler 结构专门抽象
了底层存储引擎的各个通用接口, SQL 解析器只要调用
handlerton(handler singleton) 这个结构体就可以和各种底层存储
引擎交互。

handlerton example_hton= {
   "EXAMPLE",
   "Example storage engine",
  DB_TYPE_EXAMPLE_DB,
   ...
  NULL,     /* commit */
  NULL,     /* rollback */
  NULL,     /* prepare */
   /* Create a new handler */
  example_create_handler,
   ...
};
                           

Handler Socket 底层就是基于这个接口来实现的。
     
 HS 以插件形式启动,启动后监听2个特殊端口,分别接受读请
●


求和写请求,并且 fork 出可配置数量的服务线程

●这些服务线程将轮番处理客户端请求,并对多次分散的请求做
合并处理

 HS 不会不停地打开/关闭表对象句柄,它在打开后会保持一段
●


时间,如果在一段时间内没有请求才会关闭,以方便句柄重用

● HS 自己实现了一套基于文本的通信协议(类似 Memcached 的
协议,很简洁,不用构建语法树也不需要优化),支持 telnet 的
调试
open_index <indexid> <dbname> <tablename>
<indexname> <columns> [<fcolumns>]
                     
     
测试效果:
创建带主键的 InnoDB 表,插入随机数据5,000,000条,通过 HS 端口

$ mysqladmin extended-status -uxxx -p -i 1 -r | grep
"InnoDB_rows_read"

|   Innodb_rows_read                    |   328512     |
|   Innodb_rows_read                    |   340128     |
|   Innodb_rows_read                    |   312134     |
|   Innodb_rows_read                    |   338072     |
|   Innodb_rows_read                    |   342387     |
|   Innodb_rows_read                    |   399023     |
|   Innodb_rows_read                    |   312494     |
|   Innodb_rows_read                    |   353918     |
SQL 引擎                                                     84270 op/s

  HandlerSocket                                        338072 op/s
再看 OProfile 的数据:

847486   5.0876   ha_innodb_plugin.       ut_delay
545303   3.2735   ha_innodb_plugin.   btr_search_guess_on_hash
317570   1.9064   ha_innodb_plugin.       row_search_for_mysql
298271   1.7906   vmlinux                 tcp_ack
291739   1.7513   libc-2.5.so             vfprintf
264704   1.5891   vmlinux                 .text.super_90_sync
248546   1.4921   vmlinux                 blk_recount_segments
244474   1.4676   libc-2.5.so             _int_malloc

发现原来占用 CPU 时间非常多的几个 SQL 解析调用都已经不在列表上
了,而且此时的 vmstat 数据 sys 占了几乎80%左右的 CPU 时间,说明
优化已经奏效。

                                
HandlerSocket 的特点
    ●   性能卓越
    ●   不再有重复的 Cache, 数据保持一致
    ●   不影响正常数据库功能的使用
    ●   以插件的形式存在
    ●   内置线程池
    ●   利用 MySQL 的 Handler 接口,和底层引擎
                      
    类型无关
Handler Socket 的限制
    ●   缺乏安全性
    ●   对于磁盘 IO  向的场景没有效果
    ●   性能瓶颈从 CPU  向转到网卡向
    ●   加重 slave  的复制压力




                      
MySQL Plugin 体系介绍




             
MySQL Plugin 类型
    ●   Daemon Plugins
    ●   INFORMATION_SCHEMA Plugins
    ●   Storage Engine Plugins
    ●   Full­Text Parser Plugins
    ●   Audit Plugins
    ●   Authentication Plugins
 
    ●   Replication Plugins    
MySQL Server



      st_mysql_plugin demo1=                       st_mysql_plugin demo2=
      {                                            {
        Int type;                                    Int type;
        void *info;                                  void *info; 
      ...                                          ...
      }                                            }



    Binlog_transmit_observer {
     rpl_stat_transmit_start,
      NULL, 
      NULL,
      rpl_stat_before_send_event,
    ...
                                           
    }
MySQL Plugin essentials
  mysql_declare_plugin(demo_plugin)
  {
    MYSQL_DAEMON_PLUGIN,
    &simple_parser_descriptor,
    "simple_parser",
    "Some Corporation",
    "Simple DAEMON Plugin",
    PLUGIN_LICENSE_GPL,
    simple_parser_plugin_init,
    simple_parser_plugin_deinit,
    0x0001,
    simple_status,
    simple_system_variables,
    NULL
  }
                              
  mysql_declare_plugin_end;
MySQL 5.5 Semi­Sync




              
MySQL 5.5 Semi­Sync
    ●   修改了原生复制的 packet header,  添加
        BINLOG_SEMI_SYNC 0x02
    ●   session 事务提交成功,如果至少有一个开启
        了 semi­sync 的 slave 的 io thread 接收到
        commit 复制事件
    ●   如果 master 等待 ack 超时,事务会被提
        交, semi­sync 将被自动关闭,直到有一个
        slave 跟上 master
                         
    ●   支持 GROUP COMMIT
MySQL 5.5 Semi­Sync




              
semi­sync 效率

    1200000
                                                   1110723


    1000000




    800000



                                                             异步
    600000
                                                             semi­sync
                          504971


    400000




    200000




         0                          
              2 million, 8G            4 million, 17G
     
Binlog Transmit Observer
    Binlog_transmit_observer
    transmit_observer = {
       sizeof(Binlog_transmit_observer),
       rpl_stat_transmit_start, //start
       NULL,               // stop
       NULL,               // reserve_header
       rpl_stat_before_send_event,
       NULL,               // after_send_event
       NULL,               // reset
    };

                          
MySQL 5.5  的变化




            
MySQL 5.5  的改进
    ●   MySQL 全面改用 CMake 作为主编译系统
    ●   InnoDB 成为默认引擎, Barracuda
    ●   MySQL 在 Win 平台上的性能提升较大
    ●   复制能够被更好地监控和管理
    ●   执行 SQL 语句时支持自定义异常处理并可
        将异常抛会调用程序
    ●   新增性能模式库( Performance Schema)
                        
MySQL 5.5  的改进
 ●    InnoDB 同时支持多个 BufferPool 实例
 ●    InnoDB 提升默认的并发线程策略
      innodb_thread_concurrency=0
 ●    InnoDB 细粒度控制后台 I/O 线程数量
      innodb_read/write_io_threads
 ●    InnoDB 可配置的主线程 I/O 速率
      innodb_io_capacity=500
  ●   Linux 平台原生异步 I/O 支持
                     
MySQL 5.5  性能测试
 ●    Linux Gentoo mysql23 2.6.34­hardened­r6 
      x86_64 GenuineIntel GNU/Linux
 ●    4*6(core) Intel(R) Xeon(R) CPU  X5670  @ 
      2.93GHz, 12M Cache, 6.40 GT/s Intel® QPI
 ●    32GB  内存
 ●    存储: 394 G /data, 82G /logs, 块大小: 4096,
      deadline, AIO
  ●   存储性能使用 fio(Flexible IO Tester)
                     
磁盘性能

               IOPS             带宽

    只读         4,159 op/s       297 MB/s

    只写         1,592 op/s       176 MB/s

    读写         1,296 op/s



    4k block


                             
MySQL 5.5 vs MySQL 5.1
    MySQL 5.5  配置                         MySQL 5.1 配置
    innodb_buffer_pool_size=20G           innodb_buffer_pool_size=20G
    innodb_file_per_table=1               innodb_file_per_table=1
    innodb_doublewrite=0                  innodb_doublewrite=no
    innodb_max_dirty_pages_pct=80         innodb_max_dirty_pages_pct=80
    innodb_flush_log_at_trx_commi=2       innodb_flush_log_at_trx_commit=2
    innodb_log_buffer_size=8M             innodb_log_buffer_size=8M
    innodb_thread_concurrency=0           innodb_thread_concurrency=0
    innodb_flush_method = O_DIRECT        innodb_flush_method = O_DIRECT
    innodb_write_io_threads=24            max_connections=3000
    innodb_read_io_threads=24             query_cache_size=0
    innodb_io_capacity=2700 #IOPS         query_cache_type=0
    innodb_use_native_aio
    max_connections=3000
    query_cache_size=0
    query_cache_type=0
                                       
MyISAM 引擎只读测试




           
MyISAM 引擎读写测试




           
InnoDB 引擎只读测试




           
InnoDB 引擎读写测试




           
tpcc­mysql




                        
测试使用500 w 的数据基数,64个并发线程,200秒预热时间,测试时间:3000秒。
Q & A




       

Mais conteúdo relacionado

Mais procurados

基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案Louis liu
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)frogd
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 
Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oraclefrogd
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法mysqlops
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcipDai Jun
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&LockLixun Peng
 
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收JVM内容管理和垃圾回收
JVM内容管理和垃圾回收Tony Deng
 
Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?wensheng wei
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Yiwei Ma
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220Jinrong Ye
 

Mais procurados (20)

基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracle
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
MySQL aio
MySQL aioMySQL aio
MySQL aio
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcip
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
 
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220
 

Destaque

Actividad 4: Portafolio de Presentación
Actividad 4: Portafolio de PresentaciónActividad 4: Portafolio de Presentación
Actividad 4: Portafolio de Presentaciónaleperretta
 
PRES3 0811322 U GALILEO
PRES3 0811322 U GALILEOPRES3 0811322 U GALILEO
PRES3 0811322 U GALILEOAMBNER
 
Masot lluch meritxell_cas2_pac3_tasca5
Masot lluch meritxell_cas2_pac3_tasca5Masot lluch meritxell_cas2_pac3_tasca5
Masot lluch meritxell_cas2_pac3_tasca5mmasotll
 
Hardware.25 Enero
Hardware.25 EneroHardware.25 Enero
Hardware.25 Eneroconfuncio
 
Cerimônia de Abertura das Olímpiadas
Cerimônia de Abertura das OlímpiadasCerimônia de Abertura das Olímpiadas
Cerimônia de Abertura das OlímpiadasMarco Coghi
 
Premios EjéRcito 2010
Premios EjéRcito 2010Premios EjéRcito 2010
Premios EjéRcito 2010guest71a59b
 
ApresentaçãoPET
ApresentaçãoPETApresentaçãoPET
ApresentaçãoPETLeticiacs10
 
Estudio del trabajo Introduccion
Estudio del trabajo IntroduccionEstudio del trabajo Introduccion
Estudio del trabajo IntroduccionNatalia López
 
Yost michel-duo-clarinettes-n-2
Yost michel-duo-clarinettes-n-2Yost michel-duo-clarinettes-n-2
Yost michel-duo-clarinettes-n-2joansoco
 
Os medicamentos
Os medicamentosOs medicamentos
Os medicamentosdrop555
 
Software inspection adoption: A mapping study
Software inspection adoption: A mapping studySoftware inspection adoption: A mapping study
Software inspection adoption: A mapping studyDarío Macchi
 
Juceles diapositivas
Juceles diapositivasJuceles diapositivas
Juceles diapositivascarmenzale
 

Destaque (20)

Horta Urbana
Horta UrbanaHorta Urbana
Horta Urbana
 
PM-CLACE²
PM-CLACE²PM-CLACE²
PM-CLACE²
 
Actividad 4: Portafolio de Presentación
Actividad 4: Portafolio de PresentaciónActividad 4: Portafolio de Presentación
Actividad 4: Portafolio de Presentación
 
8 Educar Rubem Alves
8 Educar   Rubem Alves8 Educar   Rubem Alves
8 Educar Rubem Alves
 
Alba 23
Alba 23Alba 23
Alba 23
 
PRES3 0811322 U GALILEO
PRES3 0811322 U GALILEOPRES3 0811322 U GALILEO
PRES3 0811322 U GALILEO
 
Lição 1
Lição 1Lição 1
Lição 1
 
Masot lluch meritxell_cas2_pac3_tasca5
Masot lluch meritxell_cas2_pac3_tasca5Masot lluch meritxell_cas2_pac3_tasca5
Masot lluch meritxell_cas2_pac3_tasca5
 
Hardware.25 Enero
Hardware.25 EneroHardware.25 Enero
Hardware.25 Enero
 
Cerimônia de Abertura das Olímpiadas
Cerimônia de Abertura das OlímpiadasCerimônia de Abertura das Olímpiadas
Cerimônia de Abertura das Olímpiadas
 
Premios EjéRcito 2010
Premios EjéRcito 2010Premios EjéRcito 2010
Premios EjéRcito 2010
 
ApresentaçãoPET
ApresentaçãoPETApresentaçãoPET
ApresentaçãoPET
 
Estudio del trabajo Introduccion
Estudio del trabajo IntroduccionEstudio del trabajo Introduccion
Estudio del trabajo Introduccion
 
Yost michel-duo-clarinettes-n-2
Yost michel-duo-clarinettes-n-2Yost michel-duo-clarinettes-n-2
Yost michel-duo-clarinettes-n-2
 
Alma De Mujer
Alma  De MujerAlma  De Mujer
Alma De Mujer
 
Os medicamentos
Os medicamentosOs medicamentos
Os medicamentos
 
Hayat annoujoum
Hayat annoujoumHayat annoujoum
Hayat annoujoum
 
Software inspection adoption: A mapping study
Software inspection adoption: A mapping studySoftware inspection adoption: A mapping study
Software inspection adoption: A mapping study
 
A mi burro
A mi burroA mi burro
A mi burro
 
Juceles diapositivas
Juceles diapositivasJuceles diapositivas
Juceles diapositivas
 

Semelhante a 2011 06-12-lamp-mysql

MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计fuchaoqun
 
Showinnodbstatus公开
Showinnodbstatus公开Showinnodbstatus公开
Showinnodbstatus公开longxibendi
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践wubx
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy clusterYiwei Ma
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
181201_CoAP_coding365
181201_CoAP_coding365181201_CoAP_coding365
181201_CoAP_coding365Peter Yi
 
Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版longxibendi
 
MySQL5.6新功能
MySQL5.6新功能MySQL5.6新功能
MySQL5.6新功能郁萍 王
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇小新 制造
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)FLASH开发者交流会
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Bob Huang
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Harvey Zhang
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationisnull
 

Semelhante a 2011 06-12-lamp-mysql (20)

MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
Showinnodbstatus公开
Showinnodbstatus公开Showinnodbstatus公开
Showinnodbstatus公开
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
181201_CoAP_coding365
181201_CoAP_coding365181201_CoAP_coding365
181201_CoAP_coding365
 
Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版
 
MySQL5.6新功能
MySQL5.6新功能MySQL5.6新功能
MySQL5.6新功能
 
Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimization
 

2011 06-12-lamp-mysql

  • 1. MySQL Handler Socket & MySQL 5.5 部分新特性介绍 完美世界 顾春江     guchunjiang@wanmei.com
  • 2.  Handler Socket 项目的意义 ●  Handler Socket 实现的途径 ●  MySQL Plugin 体系简介 ●  MySQL 5.5  新引入的 semi­sync  复制 ●  MySQL 5.5  值得关注的几个参数及性能变化    
  • 3. Handler Socket  出现的意义 ●众所周知 RDBMS 的 SQL 引擎存取代价大,对轻量 k/v  型数据没有较好的应用模式  MySQL 和 Memcached 整合后, MC 的数据一致性问 ● 题,服务器管理,可用性管理都需要考虑  Memcached 的持久化问题 ● ●最好有一种方式能跳过 MySQL 耗时的 SQL 语法解析 器而直接访问存储层    
  • 4.    
  • 5. 性能瓶颈 ● 对于 k/v 式操作,即使是用了 prepared  statement, 或者 query cache 等各种优化, 每秒执行语句的速度也是 Memcache 的4-5分 之一左右  Vmstat 中 user  的 CPU 时间比 sys 时间多不 ● 少,因此各种 mutex lock 并非是影响性能的主 要瓶颈    
  • 6. $mysqlslap --query="select user_name from test.user where user_id=1000" –number-of-queries=10000000 --concurrency=30 --host=mysql15 -uxxx -p $mysqladmin extended-status -i 1 -r -uroot | grep -e "Com_select" | Com_select | 86234 | | Com_select | 82345 | | Com_select | 85972 | | Com_select | 84270 | | Com_select | 84281 | | Com_select | 83951 | 通过正常的 SQL 接口, MySQL 可以达到84 k/s 的读取次数 $ vmstat 1 us sy id wa st 55 36 9 0 0 53 34 13 0 0     vmstat 的 user 时间占了一半多
  • 7. 资源都消耗在哪里 用 OProfile 查看系统调用 samples % app name symbol name 259130 4.5199 mysqld MYSQLparse(void*) 196841 3.4334 mysqld my_pthread_fastmutex_lock 106439 1.8566 libc-2.5.so _int_malloc 67945 1.1851 mysqld ...make_join... 63435 1.1065 mysqld JOIN::optimize() 55825 0.9737 vmlinux wakeup_stack_begin 55054 0.9603 mysqld MYSQLlex(void*, void*) 可以看到, SQL 解析相关的调用占了大部分 CPU 时   间,如果能跳过 SQL 解析层就能好很多  
  • 8. 如何降低查询开销 一般 MySQL 客户端进行查询,有如下过程: ● SQL Parser 解析 SQL 语句 ● 打开表对象句柄,申请 mutex ● 根据表信息生成 SQL 执行计划 ● IO 读写 ● 释放 mutex, 关闭表对象句柄 这5个步骤中,只有第四步是 IO 向的,其余   都是 CPU 向。  
  • 9. MySQL 为能够自定义存储引擎,有一个 Handler 结构专门抽象 了底层存储引擎的各个通用接口, SQL 解析器只要调用 handlerton(handler singleton) 这个结构体就可以和各种底层存储 引擎交互。 handlerton example_hton= { "EXAMPLE", "Example storage engine", DB_TYPE_EXAMPLE_DB, ... NULL, /* commit */ NULL, /* rollback */ NULL, /* prepare */ /* Create a new handler */ example_create_handler, ... };     Handler Socket 底层就是基于这个接口来实现的。
  • 10.    
  • 11.  HS 以插件形式启动,启动后监听2个特殊端口,分别接受读请 ● 求和写请求,并且 fork 出可配置数量的服务线程 ●这些服务线程将轮番处理客户端请求,并对多次分散的请求做 合并处理  HS 不会不停地打开/关闭表对象句柄,它在打开后会保持一段 ● 时间,如果在一段时间内没有请求才会关闭,以方便句柄重用 ● HS 自己实现了一套基于文本的通信协议(类似 Memcached 的 协议,很简洁,不用构建语法树也不需要优化),支持 telnet 的 调试 open_index <indexid> <dbname> <tablename> <indexname> <columns> [<fcolumns>]    
  • 12.    
  • 13. 测试效果: 创建带主键的 InnoDB 表,插入随机数据5,000,000条,通过 HS 端口 $ mysqladmin extended-status -uxxx -p -i 1 -r | grep "InnoDB_rows_read" | Innodb_rows_read | 328512 | | Innodb_rows_read | 340128 | | Innodb_rows_read | 312134 | | Innodb_rows_read | 338072 | | Innodb_rows_read | 342387 | | Innodb_rows_read | 399023 | | Innodb_rows_read | 312494 | | Innodb_rows_read | 353918 | SQL 引擎 84270 op/s   HandlerSocket   338072 op/s
  • 14. 再看 OProfile 的数据: 847486 5.0876 ha_innodb_plugin. ut_delay 545303 3.2735 ha_innodb_plugin. btr_search_guess_on_hash 317570 1.9064 ha_innodb_plugin. row_search_for_mysql 298271 1.7906 vmlinux tcp_ack 291739 1.7513 libc-2.5.so vfprintf 264704 1.5891 vmlinux .text.super_90_sync 248546 1.4921 vmlinux blk_recount_segments 244474 1.4676 libc-2.5.so _int_malloc 发现原来占用 CPU 时间非常多的几个 SQL 解析调用都已经不在列表上 了,而且此时的 vmstat 数据 sys 占了几乎80%左右的 CPU 时间,说明 优化已经奏效。    
  • 15. HandlerSocket 的特点 ● 性能卓越 ● 不再有重复的 Cache, 数据保持一致 ● 不影响正常数据库功能的使用 ● 以插件的形式存在 ● 内置线程池 ● 利用 MySQL 的 Handler 接口,和底层引擎     类型无关
  • 16. Handler Socket 的限制 ● 缺乏安全性 ● 对于磁盘 IO  向的场景没有效果 ● 性能瓶颈从 CPU  向转到网卡向 ● 加重 slave  的复制压力    
  • 18. MySQL Plugin 类型 ● Daemon Plugins ● INFORMATION_SCHEMA Plugins ● Storage Engine Plugins ● Full­Text Parser Plugins ● Audit Plugins ● Authentication Plugins   ● Replication Plugins  
  • 19. MySQL Server st_mysql_plugin demo1= st_mysql_plugin demo2= { {   Int type;   Int type;   void *info;    void *info;  ... ... }  } Binlog_transmit_observer {  rpl_stat_transmit_start,   NULL,    NULL,   rpl_stat_before_send_event, ...     }
  • 20. MySQL Plugin essentials mysql_declare_plugin(demo_plugin) { MYSQL_DAEMON_PLUGIN, &simple_parser_descriptor, "simple_parser", "Some Corporation", "Simple DAEMON Plugin", PLUGIN_LICENSE_GPL, simple_parser_plugin_init, simple_parser_plugin_deinit, 0x0001, simple_status, simple_system_variables, NULL }     mysql_declare_plugin_end;
  • 22. MySQL 5.5 Semi­Sync ● 修改了原生复制的 packet header,  添加 BINLOG_SEMI_SYNC 0x02 ● session 事务提交成功,如果至少有一个开启 了 semi­sync 的 slave 的 io thread 接收到 commit 复制事件 ● 如果 master 等待 ack 超时,事务会被提 交, semi­sync 将被自动关闭,直到有一个 slave 跟上 master     ● 支持 GROUP COMMIT
  • 24. semi­sync 效率 1200000 1110723 1000000 800000 异步 600000 semi­sync 504971 400000 200000   0   2 million, 8G 4 million, 17G
  • 25.    
  • 26. Binlog Transmit Observer Binlog_transmit_observer transmit_observer = { sizeof(Binlog_transmit_observer), rpl_stat_transmit_start, //start NULL, // stop NULL, // reserve_header rpl_stat_before_send_event, NULL, // after_send_event NULL, // reset };    
  • 28. MySQL 5.5  的改进 ● MySQL 全面改用 CMake 作为主编译系统 ● InnoDB 成为默认引擎, Barracuda ● MySQL 在 Win 平台上的性能提升较大 ● 复制能够被更好地监控和管理 ● 执行 SQL 语句时支持自定义异常处理并可 将异常抛会调用程序 ● 新增性能模式库( Performance Schema)    
  • 29. MySQL 5.5  的改进 ● InnoDB 同时支持多个 BufferPool 实例 ● InnoDB 提升默认的并发线程策略 innodb_thread_concurrency=0 ● InnoDB 细粒度控制后台 I/O 线程数量 innodb_read/write_io_threads ● InnoDB 可配置的主线程 I/O 速率 innodb_io_capacity=500   ● Linux 平台原生异步 I/O 支持  
  • 30. MySQL 5.5  性能测试 ● Linux Gentoo mysql23 2.6.34­hardened­r6  x86_64 GenuineIntel GNU/Linux ● 4*6(core) Intel(R) Xeon(R) CPU  X5670  @  2.93GHz, 12M Cache, 6.40 GT/s Intel® QPI ● 32GB  内存 ● 存储: 394 G /data, 82G /logs, 块大小: 4096, deadline, AIO   ● 存储性能使用 fio(Flexible IO Tester)  
  • 31. 磁盘性能 IOPS 带宽 只读 4,159 op/s 297 MB/s 只写 1,592 op/s 176 MB/s 读写 1,296 op/s 4k block    
  • 32. MySQL 5.5 vs MySQL 5.1 MySQL 5.5  配置 MySQL 5.1 配置 innodb_buffer_pool_size=20G innodb_buffer_pool_size=20G innodb_file_per_table=1 innodb_file_per_table=1 innodb_doublewrite=0 innodb_doublewrite=no innodb_max_dirty_pages_pct=80 innodb_max_dirty_pages_pct=80 innodb_flush_log_at_trx_commi=2 innodb_flush_log_at_trx_commit=2 innodb_log_buffer_size=8M innodb_log_buffer_size=8M innodb_thread_concurrency=0 innodb_thread_concurrency=0 innodb_flush_method = O_DIRECT innodb_flush_method = O_DIRECT innodb_write_io_threads=24 max_connections=3000 innodb_read_io_threads=24 query_cache_size=0 innodb_io_capacity=2700 #IOPS query_cache_type=0 innodb_use_native_aio max_connections=3000 query_cache_size=0 query_cache_type=0    
  • 37. tpcc­mysql     测试使用500 w 的数据基数,64个并发线程,200秒预热时间,测试时间:3000秒。