Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mysql 101014202926-phpapp01

572 views

Published on

  • Be the first to comment

  • Be the first to like this

Mysql 101014202926-phpapp01

  1. 1. MySQL 展示功能与源码对应 丹臣 / 赵林 2010-10-12
  2. 2. 提 纲 <ul><li>Mysql 客户端的一些展示命令与源码 </li></ul><ul><li>Mysqld 服务端的展示命令与源码 </li></ul><ul><li>Mysql 复制状态信息的查看命令与源码 </li></ul><ul><li>Innodb monitor 信息展示与源码 </li></ul>
  3. 3. 客户端 status 命令
  4. 4. 客户端 status 命令 client/Mysql.cc 源文件 …
  5. 5. 客户端 status 命令 这部份信息来自于哪里? Sql_parse.cc 源程序中的 dispatch_command 函数
  6. 6. 服务端常用的一些命令 <ul><li>show processlist </li></ul><ul><li>show authors </li></ul><ul><li>show contributors </li></ul><ul><li>show create table / view </li></ul><ul><li>show create database </li></ul><ul><li>show privileges </li></ul><ul><li>神奇的 information_schema </li></ul>
  7. 7. Show processlist
  8. 8. show processlist <ul><li>三个步骤: </li></ul><ul><li>1. 先定义 id,user,Host,db,Command,Time,State,Info 字段信息到 field_list 变量中 , 并通过 protocol->send_fields 发送到客户端 </li></ul><ul><li>2. 锁定线程总数,遍历所有线程,将所有线程的信息填入 thread_infos 链表变量中 </li></ul><ul><li>向客户端传送 thread_infos 链表中的数据 , 通过 protocol->write() 完成写操作 </li></ul><ul><li>实际中遇到的问题: </li></ul><ul><li>如果一个 mysql 线程很多,那么大部份的 sleep 线程将干扰查看 processlist 列表 </li></ul>
  9. 9. Show authors
  10. 10. show contributors
  11. 11. show create table / view
  12. 12. show create database
  13. 13. show privileges
  14. 14. information_schema 中的对象
  15. 15. schema_information 中的对象
  16. 16. st_schema_table 结构体定义
  17. 17. show table status Table 的各种信息,都在 tables_fields_info[] 数组里定义义 ,Name,Engine,Version,Row_format,Rows,Avg_row_lenght,Data_length 等等
  18. 18. show table status 再看 ST_SCHEMA_TABLE schema_tables[] 关于 tables 的定义 表的名字: TABLES 表结构的定义: tables_fields_info 表的创建函数: create_schema_table 填冲数据函数: by function get_all_tables and get_schema_tables_record
  19. 19. MySQL 复制的常用命令 <ul><li>show slave status; </li></ul><ul><li>show master status; </li></ul>
  20. 20. show slave status sql/Slave.cc 源文件 如何把一台 mysql 做成多台 master 的 slave?
  21. 21. show master status sql/Sql_repl.cc 源文件
  22. 22. Show innodb status
  23. 23. show innodb status srv_printf_innodb_monitor INNODB MONITOR OUTPUT srv_print_master_thread_info(file) 注解: BACKGROUND THREAD sync_print(file) 注解: SEMAPHORES lock_print_info_summary() 汇总事务信息 lock_print_info_all_transactions() 每个事务的信息 注解: TRANSACTIONS os_aio_print(file); 注解: FILE I/O ibuf_print(file) // insert buffer ha_print_info(file…) //hash table 注解: INSERT BUFFER AND ADAPTIVE HASH INDEX log_print(file) 注解: LOG buf_print_io(file) 注解: BUFFER POOL AND MEMORY ROW OPERATIONS( 根据全局变量值计算 ) sync_array_print_info sync_print_wait_info 源文件位置: storage/innodb_plugin/srv/srv0srv.c trx_sys_struct trx_purge_struct log_struct buf_pool_struct ibuf_struct hash_table_struct os_aio_array_struct /** The asynchronous i/o array structure */ /** Synchronization array */ sync_array_struct
  24. 24. Innodb monitor 信息展示与源码 …… . srv/Srv0srv.c 源文件中的 srv_monitor_thread 主函数 INNODB TABLESPACE and TABLE MONITOR OUTPUT dict_table_print_low, dict_update_statistics_low, dict_col_print_low, dtype_print
  25. 25. 收集表与索引统计数据
  26. 26. Follow me <ul><li>团队 blog:http://www.taobaodba.com </li></ul><ul><li>个人 blog:http://zhaolinjnu.blog.sohu.com </li></ul><ul><li>Twitter:http://twitter.com/zhaolinjnu </li></ul><ul><li>新浪微博: http://t.sina.com.cn/zhaolinjnu </li></ul><ul><li>Email:zhaolinjnu@163.com </li></ul>

×