说明
在创建InnoDB索引时用于指定对数据排序的排序缓冲区的大小。利用这块内存把数据读进来进行内部排序然后写入磁盘。这个参数只会在创建索引的过程中被使用,不会用在后面的维护操作;在索引创建完毕后innodb_sort_buffer会被释放。
这个值也控制了在执行online DDL期间DML产生的临时日志文件。
默认 1048576 bytes (1MB).
对于一个典型的排序操作来说,可以用下面的公式评估它消耗的内存:
(6 /*FTS_NUM_AUX_INDEX*/ * (3*@@GLOBAL.innodb_sort_buffer_size)
+ 2 * number_of_partitions * number_of_secondary_indexes_created
* (@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)*/)
* 8 /*64-bit sizeof *buf->tuples*/")
@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index) indicates the maximum tuples held. 2 (@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)/) 8 /64-bit size of buf->tuples*/ indicates auxiliary pointers allocated.
对于在全文索引上的并行排序,需要再*innodb_ft_sort_pll_degree:
(6 /*FTS_NUM_AUX_INDEX*/ * @@GLOBAL.innodb_ft_sort_pll_degree)
参考:
https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_sort_buffer_size