一、系统和状态变量(System and status variables)

现在Performance Schema表中可以获取到系统和状态变量。它们会被优先存储于INFORMATION_SCHEMA表中。它们的值会影响到 SHOW VARIABLES 和 SHOW STATUS的操作。show_compatibility_56(默认是OFF)这个系统参数的值会影响到输出系统和状态变量的那些语句和表,也会影响到这些语句和表所需的权限。


二、sys schema

MySQL 5.7 版本新增了sys 数据库,该库通过视图的形式把information_schema 和performance_schema结合起来,查询出更加令人容易理解的数据,帮助DBA快速获取数据库系统的各种纬度的元数据信息,帮助DBA和开发快速定位性能瓶颈。详细的信息请参考《官方文档》,这里给两个例子能直观的了解sys 功能的强大。

mysql> select * from sys.schema_table_statistics limit 0,1\G;
*************************** 1. row ***************************
     table_schema: precision_db
       table_name: pre_strategy
    total_latency: 8.27 s
     rows_fetched: 9405400
    fetch_latency: 8.27 s
    rows_inserted: 0
   insert_latency: 0 ps
     rows_updated: 0
   update_latency: 0 ps
     rows_deleted: 0
   delete_latency: 0 ps
 io_read_requests: 36
          io_read: 433.63 KiB
  io_read_latency: 11.88 ms
io_write_requests: 0
         io_write: 0 bytes
 io_write_latency: 0 ps
 io_misc_requests: 15
  io_misc_latency: 7.25 ms
1 row in set (0.11 sec)

mysql> SELECT * FROM sys.schema_unused_indexes;
+---------------+--------------------+-----------------------------+
| object_schema | object_name        | index_name                  |
+---------------+--------------------+-----------------------------+
| precision_db  | pre_real_time_data | Idx_timestamp               |
| precision_db  | pre_real_time_data | Idx_gateway                 |
+---------------+--------------------+-----------------------------+


三、条件处理(Condition handling)

MySQL现在支持堆叠的诊断区。当诊断区栈被push进来,之前第一个诊断区变成了第二个,新的诊断区(被push的那个)会被复制到第一的位置。在一个条件处理程序中,被执行的语句修改了新的当前诊断区域,但是可以使用GET STACKED DIAGNOSTICS 方法来检查栈中的诊断区域,以获取关于导致处理程序激活的条件的信息,它独立于处理程序本身的当前条件。(以前,只有一个诊断区域。为了检查处理程序内的被处理程序激活的条件,必须在执行任何可能更改它的语句之前,检查该诊断区域。)官方文档:GET DIAGNOSTICS Syntax  The MySQL Diagnostics Area


四、优化程序(Optimizer)

  1. EXPLAIN能被用来获取在命名连接中正在执行的可解释语句的执行计划。

    EXPLAIN [options] FOR CONNECTION connection_id;

     该功能可以在一个会话里面查看另外一个会话中正在执行的长查询。

    mysql> show processlist;
    +----+------+-------------------+--------------+---------+------+----------+------------------+
    | Id | User | Host              | db           | Command | Time | State    | Info             |
    +----+------+-------------------+--------------+---------+------+----------+------------------+
    |  3 | root | localhost:56525   | NULL         | Sleep   |    6 |          | NULL             |
    |  4 | root | localhost:56526   | NULL         | Sleep   | 3058 |          | NULL             |
    | 10 | fate | 192.168.1.1:49291 | precision_db | Sleep   |   25 |          | NULL             |
    | 11 | root | localhost:59279   | NULL         | Query   |    0 | starting | show processlist |
    +----+------+-------------------+--------------+---------+------+----------+------------------+
    mysql> explain FOR CONNECTION 10;
  2. 可以在单独的SQL语句中向优化器提供提示,这样可以更好地控制语句执行计划,而不是使用optizer_switch系统变量来实现。这些语句也可以结合 EXPLAIN使用。

    SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1
      FROM t3 WHERE f1 > 30 AND f1 < 33;
    SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
    SELECT /*+ NO_ICP(t1, t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
    SELECT /*+ SEMIJOIN(FIRSTMATCH, LOOSESCAN) */ * FROM t1 ...;
    EXPLAIN SELECT /*+ NO_ICP(t1) */ * FROM t1 WHERE ...;

    优化器级别的hint分四种类型:

    • Global: 会影响所有语句

    • Query block: 只会影响语句中的特定查询

    • Table-level: 影响特定表的查询

    • Index-level: 影响表中的特定索引


    当前可用的优化级别提示:

    提示名称
    描述可用范围
    BKA, NO_BKA
    Affects Batched Key Access join processing
    Query block, table
    BNL, NO_BNL
    Affects Block Nested-Loop join processing
    Query block, table
    MAX_EXECUTION_TIME
    Limits statement execution time
    Global
    MRR, NO_MRR
    Affects Multi-Range Read optimization
    Table, index
    NO_ICP
    Affects Index Condition Pushdown optimization
    Table, index
    NO_RANGE_OPTIMIZATION
    Affects range optimization
    Table, index
    QB_NAME
    Assigns name to query block
    Query block
    SEMIJOIN, NO_SEMIJOINAffects semi-join strategies
    Query block
    SUBQUERY
    Affects materialization, IN-to-EXISTS subquery stratgies
    Query block


五、触发器升级(Triggers)

以前,一张表只能包含 (INSERT, UPDATE, DELETE) 中的一种事件, (BEFORE, AFTER)中的一种操作。在MySQL5.7版本以后,不再有这个限制。


六、日志升级(Logging)

以前,在Unix或者是Unix衍生版的系统上,MySQL对发送错误日志到syslog的支持,是通过mysqld_safe捕获服务器来进行错误输出,并发送到syslog实现的。现在,MySQL服务器支持原生的syslog,也支持Windows系统。

现在,MySQL客户端有了--syslog选项,它可以将交互式语句发送到系统syslog工具







赞助本站,网站的持续发展离不开你们的支持!一分也是爱ヾ(◍°∇°◍)ノ゙
 本文链接: ,花了好多脑细胞写的,转载请注明链接喔~~
登陆
      正在加载评论
 书籍推荐