Loading

mysql性能监控

性能监控

show profile

set profiling = 1;

 show profile

SHOW PROFILE [type [, type] ... ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]

type: {
    ALL
  | BLOCK IO
  | CONTEXT SWITCHES
  | CPU
  | IPC
  | MEMORY
  | PAGE FAULTS
  | SOURCE
  | SWAPS
}
  • ALL displays all information

  • BLOCK IO displays counts for block input and output operations

  • CONTEXT SWITCHES displays counts for voluntary and involuntary context switches

  • CPU displays user and system CPU usage times

  • IPC displays counts for messages sent and received

  • MEMORY is not currently implemented

  • PAGE FAULTS displays counts for major and minor page faults

  • SOURCE displays the names of functions from the source code, together with the name and line number of the file in which the function occurs

  • SWAPS displays swap counts

profile属性

Performance Schema

监控当前服务器上性能使用情况

官方地址:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-quick-start.html

Performance Schema 默认开启,可以在my.cnf文件中配置

[mysqld]
performance_schema=ON

当启动mysql服务,尝试初始化 Performance Schema,验证初始化是否成功可以用到下面的语句

mysql> SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

Value是ON就意味着初始化成功

performance_schema表的分类

performance_schema库下的表可以按照监视不同的纬度分组

  • 语句事件记录表,这些表记录了语句事件信息
  • 当前语句事件表events_statements_current、
  • 史语句事件表events_statements_history
  • 长语句历史事件表events_statements_history_long
  • 聚合后的摘要表summary
  • summary表还可以根据帐号(account),主机(host),程序(program),线程(thread),用户(user)和全局(global)再进行细分

 

--语句事件记录表
show tables like '%statement%';
--等待事件记录表,与语句事件类型的相关记录表类似:
show tables like '%wait%';
--阶段事件记录表,记录语句执行的阶段事件的表
show tables like '%stage%';
--事务事件记录表,记录事务相关的事件的表
show tables like '%transaction%';
--监控文件系统层调用的表
show tables like '%file%';
--监视内存使用的表
show tables like '%memory%';
--动态对performance_schema进行配置的配置表
show tables like '%setup%';

 

instruments和consumers

--打开等待事件的采集器配置项开关,需要修改setup_instruments配置表中对应的采集器配置项
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'where name like 'wait%';

--打开等待事件的保存表配置开关,修改setup_consumers配置表中对应的配置项
UPDATE setup_consumers SET ENABLED = 'YES'where name like '%wait%';
*************************** 1. row ***************************
            THREAD_ID: 11
             EVENT_ID: 570
         END_EVENT_ID: 570
           EVENT_NAME: wait/synch/mutex/innodb/buf_dblwr_mutex
               SOURCE: 
          TIMER_START: 4508505105239280
            TIMER_END: 4508505105270160
           TIMER_WAIT: 30880
                SPINS: NULL
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: NULL
           INDEX_NAME: NULL
          OBJECT_TYPE: NULL
OBJECT_INSTANCE_BEGIN: 67918392
     NESTING_EVENT_ID: NULL
   NESTING_EVENT_TYPE: NULL
            OPERATION: lock
      NUMBER_OF_BYTES: NULL
                FLAGS: NULL
/*该信息表示线程id为11的线程正在等待buf_dblwr_mutex锁,等待事件为30880
属性说明:
    id:事件来自哪个线程,事件编号是多少
    event_name:表示检测到的具体的内容
    source:表示这个检测代码在哪个源文件中以及行号
    timer_start:表示该事件的开始时间
    timer_end:表示该事件的结束时间
    timer_wait:表示该事件总的花费时间
注意:_current表中每个线程只保留一条记录,一旦线程完成工作,该表中不会再记录该线程的事件信息
*/
-- history表中记录每个线程应该执行完成的事件信息,但每个线程的事件信息只会记录10条,再多就会被覆盖,
-- *_history_long表中记录所有线程的事件信息,但总记录数量是10000,超过就会被覆盖掉
select thread_id,event_id,event_name,timer_wait from events_waits_history order by thread_id limit 21;
-- summary表提供所有事件的汇总信息,该组中的表以不同的方式汇总事件数据(如:按用户,按主机,按线程等等)
-- 例如:要查看哪些instruments占用最多的时间
-- 可以通过对events_waits_summary_global_by_event_name表的COUNT_STAR或SUM_TIMER_WAIT列进行查询
--(这两列是对事件的记录数执行COUNT(*)、事件记录的TIMER_WAIT列执行SUM(TIMER_WAIT)统计而来)
SELECT EVENT_NAME,COUNT_STAR FROM events_waits_summary_global_by_event_name  ORDER BY COUNT_STAR DESC LIMIT 10;
-- instance表记录了哪些类型的对象会被检测。这些对象在被server使用时,在该表中将会产生一条事件记录
-- 例如,file_instances表列出了文件I/O操作及其关联文件名
select * from file_instances limit 20; 

show processlist

查看连接数

官方地址:https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html

查询结果示例

*************************** 1. row ***************************
     Id: 1
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 1030455
  State: Waiting for master to send event
   Info: NULL
*************************** 2. row ***************************
     Id: 2
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 1004
  State: Has read all relay log; waiting for the slave
         I/O thread to update it
   Info: NULL
*************************** 3. row ***************************
     Id: 3112
   User: replikator
   Host: artemis:2204
     db: NULL
Command: Binlog Dump
   Time: 2144
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 4. row ***************************
     Id: 3113
   User: replikator
   Host: iconnect2:45781
     db: NULL
Command: Binlog Dump
   Time: 2086
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 5. row ***************************
     Id: 3123
   User: stefan
   Host: localhost
     db: apollon
Command: Query
   Time: 0
  State: NULL
   Info: SHOW FULL PROCESSLIST

IP处理语句

inet_aton()

mysql> SELECT INET_ATON('209.207.224.40');
        -> 3520061480

inet_ntoa()

mysql> SELECT INET_NTOA(3520061480);
        -> '209.207.224.40'

数据类型选择

尽量避免使用null

整型,选择符合业务场景最小的数据类型

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • BIGINT

字符类型

char

  • 固定长度,最大长度255,自动删除末尾的空格
  • 检索效率,写效率比varchar高,空间换时间
  • 适用场景,md5摘要
  • 存储短字符串,经常更新的字符串

varchar

  • 可变长度
  • varchar(n),小于等于n使用额外一个字节,大于n使用额外两个字节
  • varchar在5.6之前,改变长度或者从255变更到255以上,会导致锁表
  • varchar适合于存储长度波动大,字符串较少更新的场景

text,字符串

blob,二进制

二者都作为独立对象,都是为了存储大数据而设计的

datetime 时间类型

  • 占用8个字节
  • 与时区无关,数据库时区配置,对datetime无关
  • 可保存到毫秒
  • 可保存时间范围大
  • 不要用字符串存储日期类型

timestamp

  • 占用4个字节
  • 时间范围,1970-01-01到2038-01-19
  • 采用整型存储
  • 依赖数据库设置的时区
  • 自动更新timestamp列的值

date

  • 占用字节比datetime,int存储要少,使用date类型3字节
  • 使用date类型可以利用日期时间函数进行日期之间的计算
  • date类型保存1000-01-01到9999-12-31之间的日期

枚举类型

可以替代常用字符串类型,建立一个数字-字符串映射关系

建一个表

create table enum_test(e enum('test_1', 'test_2', 'test_3') not null);

查询一下e

select e+0 from enum_test

SHOW PROFILE [type [, type] ... ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]

type: {
    ALL
  | BLOCK IO
  | CONTEXT SWITCHES
  | CPU
  | IPC
  | MEMORY
  | PAGE FAULTS
  | SOURCE
  | SWAPS
}
posted @ 2021-02-28 22:51  BigBender  阅读(160)  评论(0编辑  收藏  举报