Skip to content

server_cost

xiaoboluo768 edited this page Jun 7, 2020 · 2 revisions
  • 该表提供查询server常规操作需要使用到的优化器成本估算常量值
  • 表结构定义
CREATE TABLE `server_cost` (
  `cost_name` varchar(64) NOT NULL,
  `cost_value` float DEFAULT NULL,
  `last_update` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `comment` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`cost_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0;
  • 表字段含义
  • cost_name:成本模型中使用的成本估算变量名称。名称不区分大小写。如果Server在读取此表时未识别成本名称,则会向错误日志写入警告。
  • cost_value:成本估算变量值。如果该值不为NULL,则Server将直接使用其用作成本计算。否则,它使用默认估计值(代码内的编译默认值)。 DBA可以通过更新此列值以影响成本估算。但需要确保指定的是有效值(留意表结构中的字段数据类型),如果Server在读取此表时发现成本值无效(不正确),则会向错误日志写入警告。如果需要恢复默认值,只需要将此字段设置为NULL值即可,然后执行FLUSH OPTIMIZER_COSTS语句来通知Server重新读取表中的数据
  • last_update:最后一次更新该行记录的时间
  • comment:与成本估算变量相关的描述性信息
  • PS:server_cost表拥有主键列cost_name,因此不可能出现为某个成本估算变量设置多个值的情况
  • 表记录内容示例
root@localhost : mysql 01:07:25> select * from server_cost;
+------------------------------+------------+---------------------+---------+
| cost_name                    | cost_value | last_update         | comment |
+------------------------------+------------+---------------------+---------+
| disk_temptable_create_cost   |       NULL | 2017-07-01 14:31:32 | NULL    |
| disk_temptable_row_cost      |       NULL | 2017-07-01 14:31:32 | NULL    |
| key_compare_cost             |       NULL | 2017-07-01 14:31:32 | NULL    |
| memory_temptable_create_cost |       NULL | 2017-07-01 14:31:32 | NULL    |
| memory_temptable_row_cost    |       NULL | 2017-07-01 14:31:32 | NULL    |
| row_evaluate_cost            |       NULL | 2017-07-01 14:31:32 | NULL    |
+------------------------------+------------+---------------------+---------+
6 rows in set (0.00 sec)
  • 表中记录的内容即为Server识别的成本估算常量,如下:
  • disk_temptable_create_cost(默认为40.0),disk_temptable_row_cost(默认为1.0):基于磁盘的内部临时表(InnoDB或MyISAM)的成本估算常量。增加这些值会增加使用基于磁盘的内部临时表的成本估计值,查询优化器在进行成本估算时会偏向于更少使用它,与相应的基于内存的内部临时表的参数(memory_temptable_create_cost,memory_temptable_row_cost)的缺省值相比,默认值较大
  • key_compare_cost(默认0.1):比较索引键值记录的成本常量。增加此值会让查询优化器认为查询较多索引键值是昂贵的。因为,查询计划会尽量避免文件排序(基于索引的排序)
  • memory_temptable_create_cost(默认2.0),memory_temptable_row_cost(默认0.2):基于MEMORY存储引擎的内部临时表的成本估算常量。增加这些值会增加使用内部内存临时表的成本估计值,即会使得优化器偏向于更少使用它
  • row_evaluate_cost(默认值为0.2):评估记录行的成本常量。与读取较少行的范围扫描相比,表扫描变得相对昂贵,查询计划会偏向于更少使用表扫描

上一篇:engine_cost表 |下一篇:event表

Clone this wiki locally