• 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
    }
    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    c#中对rgb的使用
    编写高质量代码改善C#程序的157个建议——建议141:不知道该不该用大括号时,就用
    编写高质量代码改善C#程序的157个建议——建议140:使用默认的访问修饰符
    编写高质量代码改善C#程序的157个建议——建议139:事件处理器命名采用组合方式
    编写高质量代码改善C#程序的157个建议——建议138:事件和委托变量使用动词或形容词短语命名
    编写高质量代码改善C#程序的157个建议——建议137:委托和事件类型应添加上级后缀
    编写高质量代码改善C#程序的157个建议——建议136:优先使用后缀表示已有类型的新版本
    编写高质量代码改善C#程序的157个建议——建议135: 考虑使用肯定性的短语命名布尔属性
    编写高质量代码改善C#程序的157个建议——建议134:有条件地使用前缀
    编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量
  • 原文地址:https://www.cnblogs.com/YC-L/p/14450323.html
Copyright © 2020-2023  润新知