6. log_output
功能:决定通用查询日志和慢查询日志的输出位置
取值:TABLE(输出到表),FILE(默认值,输出到文件),NONE(不输出,优先级高),以逗号分隔的关键字列表
说明:
①log_output = NONE时,通用查询日志和慢查询日志无论是否开启,均不起作用
②FILE的性能优于TABLE
类型:全局系统变量
设置:set log_output = FILE;
5. slow_query_log
功能:开启/关闭慢查询日志
取值:0关闭,1开启
类型:全局系统变量
设置:set slow_query_log = 1;
说明:慢查询日志起作用的前提是,log_output全局系统变量为FILE
4. innodb_buffer_pool_instances
3. innodb_file_per_table
功能:对后续新创建的InnoDB表,使用的表空间类型为FILE_PER_TABLE
取值:0开启,1关闭
作用域:全局
类型:动态变量,随时设置随时生效
设置:set global innodb_file_per_table = 1;
说明:
开启该设置后,后续新创建的InnoDB表,其索引和数据,放入自己的表空间,即对应数据库目录下的同名.ibd文件。
关闭该设置后,新表的索引和数据,放入系统表空间,即顶层数据目录下的ibdata文件。
好处:
1.
2. wait_timeout
功能:决定超时时间
作用域:全局和会话
类型:动态变量,随时设置随时生效
取值:[1, 31536000],单位秒,跨度:1秒——1年,系统默认值28800(8小时)
说明:
存在一个全局wait_timeout,每个连接又有各自的wait_timeout、是为会话级wait_timeout。
会话级wait_timeout在连接建立时被初始化,初始值由client连接类型决定:
连接选项包含CLIENT_INTERACTIVE,由全局interactive_timeout初始化,如navicat premium的命令行界面;
否则,由全局wait_timeout初始化,如mysql-connector/c++的Connection* sql::Driver::connect()
设置:
set global wait_timeout = n1;
set session wait_timeout = n2;
设置全局级wait_timeout对当前会话级wait_timeout无任何影响,当前会话级wait_timeout已在连接建立时初始化。该设置对后续新建连接的会话级wait_timeout的影响取决于client的连接类型。如果想改变当前会话级wait_timeout,需要显示调用语句二。
查看:
show global variables like "wait_timeout";
show session variables like "wait_timeout";
1. innodb_flush_log_at_trx_commit
功能:决定log buffer写入log file最后刷到磁盘的时机
影响:insert操作的速度
取值:0, 1, 2
0——每秒写入一次,伴随着刷新一次
1——每当有事物提交,即写入一次刷新一次
2——每当有事物提交,即写入一次,刷新为每秒一次
作用域:全局
类型:动态变量,随时设置随时生效
设置:set global innodb_flush_log_at_trx_commit = 0;
说明:设置成功后,所有会话均受影响;MySQL重启后,该变量由配置文件初始化,默认为1
安全性:1 > 2 > 0
进程mysqld崩溃,type0一秒内的事物全丢;
操作系统崩溃或意外断电,type2一秒内的事物全丢;
type1符合ACID,安全级别最高。
测试
表结构:
测试工具:mysqlslap
测试条件:单用户执行1000次insert,insert内容相同。
结果:speed0 = 2 * speed2 = 8 * speed1
前言
系统变量的作用域,包括全局级和会话级。
允许一个变量,既有全局级对象,又有会话级对象,如global var_name和session var_name同时存在。
若系统变量同时拥有全局级对象和会话级对象,则有如下结论:
1. 全局级作为会话级的初始默认值;
2. 由会话级控制具体行为。
例如,假设存在系统变量Mario,功能:控制是否修水管,作用域:全局和会话,则有如下结论:
1. 每个新进连接的session Mario由global Mario初始化;
2. 某时刻,global Mario改变,不影响已打开连接的session Mario。只影响后续打开连接的session Mario;
3. 每个连接,是否修水管的行为,由该连接的session Mario值决定,与当前global Mario值无关。