【MySQL性能优化】Mysql系统变量配置
来源:互联网 发布:青年网络公开课罗思义 编辑:程序博客网 时间:2024/05/16 03:48
MySQL 5.5版本支持超过300种可配置的系统变量。其中很 多系统变量如果得到正确设定,可以对整体系统性能改进起到很 大作用。系统变量可以定义MySQL的配置方式、重要的文件和
数据的存放位置、如何管理兼容性以及MySQL拓扑内的交互等。 在本章和本书中有关优化SQL语句的章节中,我们将集中讨论一 小部分对执行和优化单个SQL语句有直接影响的MySQL系统
变量。
本章将介绍下面的内容:
•内存相关的系统变量
•日志和工具系统变量
•各种查询相关的系统变量
6.1内存相关的系统变量
MySQL内存系统变量能够影响全局内存的使用,也能够影响 到多线程的单一 MySQL进程中会话的内存使用情况。我们不会 在本书中讨论有关系统调整对于优化MySQL中内存使用情况的 重要性。一定要注意的是,MySQL对于进程分配和内存存储引擎 的分配是没有限制的。错误的系统调整会导致系统可用的内存资 源耗尽。
这些MySQL系统变量可以在MySQL配置文件中定义并在启 动时加载。很多MySQL变量是动态的——也就是说,它们的值 可以在运行时通过mysql客户端的SET命令更改。可以参考 MySQL参考手册来了解某个特定版本中所有动态变量的定义。
注意
在MySQL中,引用会话其实与一个给定的连接有关。默认 情况下,一个连接也就是一个线程——即一个连接有且只有一个
线程。
注意
对于熟悉Oracle的读者,全局内存缓冲区可以被理解成 MySQL进程的系统全局区域(SGA)。这个缓冲区是在mysqld进 程启动时被预先分配的。每个会话的内存缓冲区以及内存表可以 被理解成当前运行的mysqld进程的进程全局区域(PGA)。
除非特别指出,否则下面所有变量都可以在MySQL 5.0或更 高版本中使用。这些变量中的很多也存在于更早的MySQL版本中, 如 MySQL 3.x 和 MySQL 4.x 中。
1.全局内存缓冲区
MySQL变量名
描 述
keybuffersize
这个变量定义了 MylSAM索引码的缓冲区的大 小,通常这个变量也被称为码缓存。可以定义多 个不同大小的已命名的码缓冲区
innodb_bufTer_pool_size
这个变量定义了 InnoDB缓冲池的大小,InnoDB 缓冲池是存储数据和索引页的主要场所
innodb—additional mem_pool_size
这个变量定义了 InnoDB的数据字典以及内部数 据结构缓冲区的大小
querycachesize
这个动态变量定义了査询缓存的大小。查询缓存 可以用来缓存经常执行的SELECT语句
2.全局/会话内存缓冲区
max heap—table一size
这个动态变量定义了一个MEMORY存储引擎表的最大容量
tmp table size
这个动态变量定义了一个内部基于内存的临时表(在此表被修 改并写入磁盘之前)的最大容量。这个变量和max heap table一 size密切相关
3.会话缓冲区
join 一 buffer一 size
这个动态变量定义了当索引无法满足连接条件时在两个表之 间做全表连接操作能够使用的内存缓冲区的大小
sortbuffersize
这个动态变量定义了当索引无法满足需要的顺序信息时对结 果排序能够使用的内存缓冲区的大小
read buffer size
这个动态变量定义了连续数据扫描时能够使用的内存缓冲区 大小
readrndbuffersize
这个动态变量定义了有序(也就是不连续的)数据扫描时能够使 用的内存缓冲区大小
警告
一个常见的问题是管理员没有认识到这4个缓冲区是以每个 线程为基础定义的。在MySQL 5.1以及更高版本中,sort_buffer_ size缓冲区的默认值可以在128K/256K〜2M之间变化。如果一个 缓冲区的大小定义为10M或者100M的话,就会对查询和系统性 能产生相反的影响。在没有证据能证明性能提升的情况下,最好 的方法是恢复这4个变量的默认值来保证总体内存利用率最大。
可以在MySQL参考手册中找到关于这些变量和其他变量的 更多信息:http://dev.mysql.eom/doc/refhian/5.S/en/memory-use.html。
3. key_buffer_size
key buffer size是只存储MylSAM索引信息的全局内存缓冲 区。在对应的.MYI文件中的索引数据从磁盘上被读取出来然后存 入这个缓冲区。想要调整变量key_biiffer_SiZe的大小,只需要简 单地统计所有MylSAM表中总索引的大小,然后随着数据随时间
增长不断调整即可。
当这个索引码缓冲区中没有足够的空间来存储新的索引数据 时,将会用最近最少使用(LRU)的方法覆盖掉旧的页面。
注意
即使运行一个全部采用InnoDB的模式,仍然需要定义一个 索引码缓冲区,因为MySQL元信息与MylSAM定义的相同。可 以给这个小的缓冲区定义一个8M的值。
当观察单个MySQL连接时,一个没调整好的MylSAM索引 码缓冲区能够呈现出不同状态。在SHOW [FULL] PROCESSLIST 的State列中,值Repairing the keycache是一个明显的指标,它指 出当前索引码缓冲区大小不足以执行当前运行的SQL语句。这将 导致额外的磁盘I/O开销。
想要了解更高级调整信息可以使用以下变量:key_Cadie_ age threshold、key cache block size、key cache_divisionJimit 和 preloadbufFersize。
6.1.2命名码缓冲区
除了默认的MylSAM码缓冲区,MySQL支持其他的命名码 缓冲区。这使得管理员能够为MylSAM索引定义专用的内存池, 该MylSAM可以为命名码缓冲区分配和指定给定表。下面是创建 一个已命名64M的缓存的示例:
mysql> SET GLOBAL hot.key buffer size=1024*1024*64;
也可以在MySQL配置文件my.cnf中定义这个缓存。
警告
在MySQL配置文件中,可以用字节或者KB、MB和GB这 样的通用格式来定义变量的大小。当使用SET命令动态地定义同 一个变量时,只有以字节为单位的数字值是合法的。可以用下面 的语法把字节转化成IK、1M或者64M: 1024X1024X64,然而 这并不是必需的。
可以使用CACHE INDEX语句把表索引分配到指定的命名缓 存上:
mysql> CACHE INDEX tablel, table2 IN hot;
有关哪些表被缓存到命名缓存中这样的信息是不会被持久化 的。在MySQL重启的过程中,这些信息都会丢失。如果想在系 统重启的时候完成这些功能,可以在服务器启动的时候使用 init一file变量运行特定的SQL语句。
如果你能够预先填充包含给定的表中所有索引的码缓冲区, 当码缓冲区能够存储所有的索引或者没有叶子节点页面的索引时 将会获得额外的性能提升。请看下面的示例:
LOAD INDEX INTO CACHE tablel, table2;
可以使用这个语法把索引加载到任何索引码缓存中,包括默认索 引码缓存。
9.2.1 innodb一buffer—pool—size
innodb_buffer_pool_size是用来存储所有InnoDB数据和索引 的全局内存缓冲区。对完全使用InnoDB引擎的模式来说,这是 最重要的缓冲区,一定要正确分配。不正确的分配这个缓冲区的 空间可能导致额外的磁盘I/O开销并降低查询性能。
对小型系统来说,可以用所有InnoDB表的容量加上一个小 的额外开销来计算出这个缓冲区的合适大小。如果你只有一个小 的有限空间的RAM存储器时,这一点尤为重要。举例来说,当 你在一个支持1.7GB的RAM存储器的Amazon Web Service小实 例上分配1GB的InnoDB缓冲区,而总数据库大小仅有200MB 时,你就等于分配了不必要的内存空间。
对于这个变量,没有最好的佔计大小的方式,因为还有很多 其他因素都会影响到MySQL的内存总使用量。常见的方法是把 这个变量设定为RAM空间的80%,但在很多情况下这样设定也 是不合理的。
可以使用 SHOW GLOBAL STATUS 或者 SHOW ENGINE INNODB STATUS命令来监控InnoDB缓冲池的使用情况。请看 下面的示例:
mysql> SHOW GLOBAL STATUS LIKE * innodb buffer%1;
I Variable name I Value
+
1 Innodb
—buf fer_
Jpool-
■pages
data |
+
196892 |
1 Innodb_
■buf f er
pool
pages
一dirty I
37799 I
1 Innodb
buffer
pool
mmam ■
pages
一flushed I
456354 |
1 Innodb
buffer
_pool_
pages
_free I
445552 1
1 Innodb一
_buf fer_
pool
M mm
—pages
_misc I
129C8 丨
1 Innodb
buffer
pool
mmm ■
■pages
—total I
655352 |
1 Innodb—
■buf fer_
一 pool-
—read—
ahead 1
122 I
I Innodb
buffer
pool
mm
read
ahead一evicted 1
0 I
1 Innodb,
”buf fer_
J)OOl-
_read_
requests I
4421251611
1 Innodb
buffer
pool
reads
1
18283 |
1 Innodb—
_buf fer_
pool
一 麵
wait
free |
0 |
1 Innodb
buffer
pool^
’write
一requests I
1750151631
+
+•
+
mysql> SHOW ENGINE INNODB STATUS
BUFFER POOL AND MEMORY
Total memory allocated 43168694272; in additional pool allocated 0
Dictionary memory allocated 960147
Buffer pool size 2574464
Free buffers 1893581
Database pages 618715
Old database pages 228288
Modified db pages 52209
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 16276, not young 0
0•75 youngs/s, 0.00 non-youngs/s
Pages read 34431, created 584284, written 2473937
0•00 reads/s, 3.12 creates/s, 219.40 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate
1. / 1000 not 0 / 1000
Pages read ahead 0 • 00/s, evicted without access 0 . 00/s
LRU len: 618715, unzip一LRU len: 0
I/O sum[0]:cur[1104], unzip sum[0]:cur[0]
总共有超过50个InnoDB相关的系统变量。所有这些变量都 以丨11110011)_前缀开头。那些会影响到整体系统性能并且应该在定义 innodb_key_buffer_size变量时应该考虑到的InnoDB变量包括: innodb_buffer_pool_instances(从 5.5 开始)、innodb_max_dirty一 pagesjpct、innodb_thread一concurrency、innodb一spin一wait一delay、 innodbjpurge—threads(从 5.5 开始)、innodb—checksums、innodb_file一 per_table 以及 innodb_log_file_size。
9.2.2 innodb additional mem pool size
innodb_additional_mem_pool_size 变量为 InnoDB 特定数据字
典信息定义了内存池。对于这个变量,没有什么好的方法来确定 它的最优值,一般将其设定为10M。在MySQL 5.5中默认大小为 8M。在早期版本中,默认值是1M。如果这个缓冲区空间不足, MySQL会在错误日志中报告一个警告信息。
9.2.3 query一cache一size
query cache size变量是一个用来存储经常缓存过的查询全 局内存缓冲区。当启用query_cache_type变量之后,SELECT查询 会被自动缓存起来。还可以通过SQL一CACHE和SQL一NO_CACHE 来进一步确定哪些语句需要被缓存。启用查询缓存能够在读取操 作频繁的系统中显著地改进性能,但它也可能降低读/写系统的整 体性能。
使用query—cache_type变量可以总体启用和禁用查询缓存。 启用时,query_cache_size的值可能为0,这表示没有查询需要被 缓存;而MySQL实例可以通过动态地改变query_cache_size的值 在某个时间仍然可以支持缓存。在不需要的时候从物理上禁用查 询缓存可以带来一些小的性能开销。
可以使用下面的语句动态启用查询缓存:
mysql> SET GLOBAL query—cache一type = 1;
mysql> SET GLOBAL query一cache_size = 1024 ★ 1024 * 16;
要动态禁用查询缓存可以使用下面的语句:
mysql> SET GLOBAL query_cache_type = 0; mysql> SET GLOBAL query一cache_size =0;
可以通过 SHOW GLOBAL STATUS 命令或者 INFORMATION— SCHEMA.GLOBAL一STATUS表来监控查询缓存的有效性。请看 下面的示例:
+ +
I Qcache^
■queries一in一cache
1 8115 |
I Qcache
■inserts
1 596110709 |
1 Qcache^
hits
I 1015208171 |
I Qcache
一lowmem—prunes
I 526595375 |
1 Qcache^
_not_cached
1 1499575 |
I Qcache_
■free_memory
I 8400752 |
I Qcache—
■free一blocks
I 2465 |
1 Qcache— +
■total一blocks
I 18707 | + +
mysql> SHOW GLOBAL STATUS LIKE
+
I Variable name
1Qcache%1;
+
I Value
+
可以用下面的公式来确定查询缓存的有效性:
((Qcache一hits/(Qcache_hits + Com_select + 1))*100)
在确定读写量时,一定要把Qcache_queries_in_cache状态变 量考虑进去。这个变量将和Com_sdeCt状态变量一起决定你的 MySQL实例的总体读操作的满意率。
查询缓存还可以通过很多不同的系统变量来进一步优化,这 些系统变量会影响到个别查询的分配。这些变量包括: query cache—limit、query—case_min_res unit、query—cache_alloc— block size、query cache wlock invalidate 和 queryjprealloc—size。
9.2.4 max_heap—table_size
这个变量定义了 MySQL ME MORY存储引擎表的最大容量。 当某个表容量超过最大值时,应用程序会收到下面的信息:
mysql> SET SESSION max一heap一table_size=1024*1024; mysql> CREATE TABLE tl(
-> i INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> c VARCHAR(1000)) ENGINE=MEM〇RY;
mysql> INSERT INTO tl(i) VALUES
-> (NULL),(NULL),(NULL),(NULL)• (NULL)•
-> (NULL), (NULL)f (NULL)f (NULL),(NULL);
mysql> INSERT INTO tl (i) SELECT NULL FROM tl AS a, tl
AS b, tl AS c;
ERROR 1114 (HY000): The tableftlf is full
如前所述,这个变量有一个全局默认值,而且在上例的每个 线程上也可以指定这个变量的值。MySQL并没有为所有 MEMORY表的总容量做任何限制。这个变量仅用于单个表。
MEMORY存储引擎表的总大小可以通过SHOW TABLE STATUS 命令和 INFORMATION一SCHEMA.TABLES 表来确定。
另外,MEMORY存储引擎表对任意字符列都使用固定的宽 度。在前面的示例中,当在MEMORY表中定义时,那么 VARCHAR(IOOO)列实际上使用的是CHAR(IOOO)。因为有了这个 限制,一个MEMORY表无法包含任何TEXT(即CLOB)或者 BLOB字段。这也是tmp_table—size变量中非常重要的一点。
9.2.5 tmp」able—size
max_heap_table_size变量和tmp_table 一 size变量中的最小值定 义了内部临时表的最大容量,内部临时表用于存储在内存中的查 询执行过程。如果在EXPLAIN SELECT的结果中的Extra列中出 现了 Using temporary,那么可以判断在查询执行过程中用到了内 部临时表。一个SQL查询可以使用多个临时表。
MySQL使用MEMORY存储引擎来支持这些内部临时表。当 内部临时表的容量超过max_heap_table_size变量和tmptable 一 size 变量中的最小值时,MySQL会在临时位置创建一个基于MylSAM 磁盘的表。由于MEMORY存储引擎的限制,为临时表定义的任 何TEXT和BLOB列都会导致一个基于磁盘的MylSAM临时表。
在临时表中定义大变量字符数据类型也会导致创建基于磁盘的临 时表,因为这些字段是固定宽度的。
目前没有一种简便的方式来确定内部临时表的总容量。可以 通过 MySQL 状态变量 created_tmp一tables 和 created_tmp_disk_ tables来分别确认创建了临时表或者基于磁盘的临时表,请看下 面的示例:
mysql> SHOW SESSION STATUS LIKE 1create%tables*;
+ + +
I Variable_name | Value I
+ + +
I Created tmp disk tables I 0 I
I Created一tmp_tables I 6 I
+ + +
mysql> SELECT ..•
mysql> SHOW SESSION STATUS LIKE 1create%tables1;
+ + +
I Variable_name | Value I
+ + +
I Created tmp disk tables | 1 I
I Created tmp tables I 8 I
+ + +
注意
衡量MySQL状态变量的值也会对返回的结果有影响。例如, 执行SHOW STATUS命令生成一个临时表。在MySQL版本、全 局范围以及会话范围内的变量的值也会有不同。所以一定不要忘 记经常检查测量变量带来的影响。
了解MySQL中内部临时表的操作原理对系统性能是至关重 要的。例如,超过容量限制并写入磁盘的高并发内部临时表会出 现如下错误:
ERROR 126 (HY000) : Incorrect key file for table ’// tmp/#sql_5b7_l.MYI1; try to repair it
这是由于tmpdii•变量定义的磁盘空间已经满了。这个错误中 提到的临时磁盘表没有办法修复了。在MySQL5.5中,可以使用 PERFORMANCE一SCHEMA来帮助统计基于磁盘的临时表的总
大小。
tmp_table_size变量有一个默认全局值,它也可基于每线程来 指定,这对那些需要生产很大的临时表的查询很有好处。
可以在MySQL参考手册中找到更多关于如何使用内部临时 表的信息:http://dev.mysqLcom/doc/refinan/5.5/en/mtemal-temporary- tables.html o
9.2.6 join一buffer—size
join buffer size定义了每个线程的内存缓冲区,当查询必须 连接两个表的数据集并且不能使用索引时,这个缓冲区会被用到。 这个缓冲区是专门为每个线程的无索引连接操作准备的。可以通 过查询计划中Extra列的值为Using join buffer来证实使用了这个 缓冲区。建议将这个缓冲区设置为默认大小。增加这个缓冲区的 大小也不会加快全连接操作的速度。为这个缓冲区设定太大的容 量可能会对高连接的环境中的内存使用造成影响。
9.2.7 sort_buffer_size
这个变量定义了每个线程用于对结果集排序的每线程缓冲 区。可以通过查询计划中Extra列的值为Using flle-sort来确定使 用了这个缓冲区。不推荐你增加这个缓冲区的大小,因为这个缓 冲区是完全分配给每个请求的,而且当默认值太大时可能会降低 查询的执行速度。
9.2.8 read一 buffer_size
当SQL查询执行连续的表数据扫描时会用到这个缓冲区。只 有在大量连续表数据扫描时才推荐增加这个缓冲区的大小。
9.2.9 read—md_buffer_size
这个缓冲区用来存储那些作为排序操作的结果被读取的数 据。这个缓冲区和read一buffer一size的不同之处在于,它读取的连 续数据是和数据在磁i上的^储方式相关的。只有在执行大型 ORDER BY语句时才推荐增加这个缓冲区的大小。
6.2有关基础工具的变量
slow_query_log(从 5.1 版本开始)
这个动态布尔变量决定是否在日志中记录执 行缓慢的查询
siow_query_log_file (从 5.1 版本开始) log_slow_queries (对 5.0 和更早版本, 5.1开始废弃)
当输出结果记录到文件中时,这个动态变景用 来指定执行缓慢的查询日志的文件名
long_query_time
这个动态变量用来指定一个正常查询最大的 执行时间,超过这个时间,查询就被认为是执 行缓慢的查询
m
generaljog (从5.1版本开始)
这个动态布尔变量决定是否把所有的数据库 查询都记录在日志中
general_log_file (从 5.1 版本开始) log (对5.0和更早版本,5.1开始废弃)
当输出结果记录到日志中时,这个动态变量指 定全面日志的文件名
log_output(从5.1版本开始)
这个动态变量定义了执行缓慢的査询日志和 全面日志的目标类型
profiling
这个动态变量定义了分析每个线程的语句
2 slow—query—log
这个布尔变量可以启用执行缓慢的查询的日志功能,日志将 会报告所有执行时间超过long_query_time变量值的查询。这里强 烈推荐一直定义这个选项,并且对那些运行时间长的可以优化的 查询的结果经常分析。这是一个可以被动态改变的全局变量。
技巧
缓慢查询日志和通用查询日志是分别由slow一query_log和 general Jog系统变量动态控制的。在MySQL 5.0及之前的版本中, 这些日志不是动态的,想要启用或者禁用这些功能都需要重启 MySQL实例。
3 slow_query—log—file
这个变量定义了当慢查询日志功能开启时保存所有被记录的 查询文件的文件名。这是个全局变量,可以动态改变它的值。
4 generaljog
这个变量用来启用记录每条查询执行情况的全面查询日志。 这个变量只能在每个服务器实例值上启用或者禁用。这是个全局 变量,可以动态改变它的值。
5 general loq file
这个变量定义了记录了当全面日志启用时所有SQL查询的文 件名。这是个全局变量,可以动态改变它的值。
6 long_query一time
这个变量指定了一个查询执行时间的限制,当慢查询日志功 能启用时,执行时间超过这个限制的查询都会被记录在慢查询日 志中。从MySQL 5.1.21开始,这个变量接受以毫秒为单位的值。 当指定日志输出为TABLE类型时,这个变量只支持以秒为单位 的值。这是一个全局变量,可被动态定义。
7 log一 output
这个变量定义了慢查询日志和全面查询日志的输出位置,有 效的选项有FILE、TABLE和NONE。当定义输出位置为FILE时, 日志的输出文件分别由slow_query_log_file和general一log_file系 统变量来定义。如果这个变量为TABLE,日志输出将会分别记录 在mysql.slow一log和mysql.general_log表中。这两个表是在内部 以CSV存储引擎定义的,所以不支持任何索引。当需要频繁查询 这些表时,建议创建表的副本并相应地优化你的查询。这是一个 全局变量,可被动态定义。
8 profiling
MySQL通过分析工具暴露一些语句执行的内部细节信息。这 个布尔会话变量可以激活细节语句分析并且可以提供SQL的精 确到毫秒级的准确执行时间。这个工具还可以计算出关键的内部 组件的时间并逐步跟进查询计划进程中。
可以通过profiling_history一size变量控制在每个线程分析缓 冲区中的SQL语句的数量。
6.3其他优化变量
optimizer_switch (从 5.1 版本开始)
这个变量决定了 MySQL优化器中哪个高级索 引合并功能会被启用
defaultstorage—engine
当没有指定存储引擎时,这个变量定义了表使 用的存储引擎
max_allowed_packet
这个变量定义了结果集的最大容量
sql_mode
这个变置定义了支持的各种服务器SQL模式
innodb strict mode(从 5.1 版本开始)
这个变量定义了一个专门为InnoDB插件提供 的服务器SQL模式级别
6.3.1 optimizer—switch
这个选项定义了一系列MySQL查询优化器特性的高级开关, 可以用来关闭(默认是激活状态)三种不同的索引合并条件以及引 擎下推条件。
具体内容可以从以下系统变量的介绍中了解到:max_seeks一 for_key、optimizer_prune_level、optimizer—search_depth 以及 engine^ condition_pushdown o
default_storage__engine
当未指定ENGINE值时,这个变量用来为CREATE TABLE 命令指定存储引擎。在MySQL5.5中,默认存储引擎由MylSAM 变成了 ImioDB。任何历史遗留的应用程序都可能经历过这样的问 题,原本以为默认使用的MylSAM引擎现在变成了 InnoDB。
max—a I lowed 一 packet
可以用max_allowed_packet变量来定义SQL查询结果集的最
大值。增大这个值会允许查询返回更大的结果集。通过限制这个 变量的大小,你会得到一个潜在的指标来表明有一个查询返回了 很大的结果集,而这可能是无意义的。
sql—mode
MySQL支持一系列不同的服务器SQL模式。这些模式之间 区别很大,并且提供了更加符合美国国家标准学会(ANSI)的SQL 语法,也提供了默认预期的数据验证,并支持不同的mill和零日 期数据的管理方式。这些设置非常重要,因为它们能够改变SQL 语句的运行方式所带来的影响。
innodb—strict—mode
这个变量为InnoDB插件提供了 sql_mode功能,这个功能在 MySQL 5.1中是可选的,但现在在MySQL 5.5中已经是默认的 InnoDB实现了。这些选项扩展了原生的sql一mode,包含对表对 象的管理以及行检查功能。
6.4其他变量
那些并没有在本章讨论过但你也应该考虑做深入分析的 MySQL系统变量还包括下面这些:
concurrent_insert
foreign_key_checks
log_bin
maxJoin_size
maxseeks 一 for一key
minexamined_row 一 count
open 一 files 一 limit
optimizer_prune_level
optimizer search depth
sql一buffer一result
sql_select一limit
syncbinlog
thread一cache 一 size
thread 一 stack
tmpdir
tx_isolation
unique一checks
6.5本章小结
本章详细介绍了那些和本书的主要目的相关的最常用的 MySQL系统变量,这些变量可以帮助进行全面的SQL优化。除 此之外还有很多其他变量需要关注,尤其是那些能够影响到流行 的InnoDB存储引擎的DML性能优化的。请查阅MySQL参考手 册上给出的详细列表。
- 【MySQL性能优化】Mysql系统变量配置
- mysql系统性能优化方案
- mysql安全配置性能优化
- Mysql性能优化-数据库配置
- mysql 性能-优化服务器配置
- 【mysql 性能优化篇】性能配置
- mysql性能优化之配置优化
- mysql性能优化-配置参数优化
- 性能优化之MySQL优化(五)- MySQL配置优化
- 系统性能相关的MySQL变量
- Mysql系统参数优化性能篇
- mysql my.cnf 配置性能优化
- MySQL性能优化之参数配置
- MySQL性能优化之参数配置
- MySQL性能优化之参数配置
- MySQL性能优化之参数配置
- MySQL性能优化之参数配置
- MySQL性能优化之参数配置
- 冒泡排序
- 温伯格的《系统化思维导论》,结合《语言本能》《改变》《科学革命的范式》和逻辑学的一些书,谈谈学科的边界
- C++中的endl和C中的\n的区别
- 深入理解Java之线程池
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 【MySQL性能优化】Mysql系统变量配置
- 算法优解(1)-图文并茂详解getMin栈
- iOS开发-常用第三方开源框架介绍
- HTML5触屏设备单点触控事件
- 【MySQL性能优化】MySQL性能优化的21个最佳实践 和 mysql使用索引
- C语言一个常见错误
- python发送邮件
- windows安装补丁慢 360安全卫士和腾讯电脑管家安装同样卡住 解决办法
- PAT(乙级)1002 数字分类 (20)