千金良方:MySQL性能优化金字塔法则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.1 编译时配置

以往,我们认为自行编译安装MySQL其性能要优于用官方编译好的二进制包、RPM包等来安装。可能在MySQL早期的版本中有这样的情况,但随着MySQL版本不断迭代,业界不少人亲测证实,目前MySQL版本并不存在自行编译安装的性能比用官方编译好的二进制包安装的性能高的情况。所以,在通常情况下,我们不建议编译安装MySQL,因为在大规模部署的场景中,此举十分浪费时间(需要通过编译安装的方式精简模块的场景除外)。

我们可以使用cmake的编译选项来自行决定MySQL实例是否支持performance_schema的某个等待事件类别。

shell> cmake . \
        -DDISABLE_PSI_STAGE=1 \         # 关闭STAGE事件监视器
        -DDISABLE_PSI_STATEMENT=1       # 关闭STATEMENT事件监视器

注意:虽然可以通过cmake的编译选项关闭performance_schema的某些功能模块,但是通常不建议这么做,除非你非常清楚后续不可能使用到这些功能模块;否则,还需要重新编译。

当我们接手一个别人安装的MySQL数据库服务器,或者不清楚自己安装的MySQL版本是否支持performance_schema时,则可以通过mysqld命令查看是否支持performance_schema。

# 如果发现以performance_schema开头的选项,则表示当前mysqld支持performance_schema;否则,说明当前数据库版本不支持performance_schema,可能需要升级MySQL版本
shell> mysqld --verbose --help
...
  --performance_schema
...
  --performance_schema_events_waits_history_long_size=#
...

还可以登录到MySQL实例中,使用SQL命令查看是否支持performance_schema。

# Support字段值为YES表示当前数据库支持;否则,可能需要升级MySQL版本
mysql> SHOW ENGINES\G
...
*************************** 6. row ***************************
      Engine: PERFORMANCE_SCHEMA
    Support: YES
    Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
9 rows in set(0.00 sec)

注意:在mysqld选项或show engines语句输出的结果中,如果看到有performance_schema相关信息,并不代表已经启用了performance_schema,仅仅代表数据库支持,如果要启用它,还需要在服务器启动时使用系统参数performance_schema=ON(在MySQL 5.7之前的版本中默认关闭)显式开启。