您的位置:首页 > 数据库 > MySQL

mysql 优化

2016-07-20 15:06 387 查看
1.show variables;
服务器静态参数值
2.show status;

服务器动态运行状态信息

也可以在操作系统下直接查看
mysql -uroot variables;
mysql -uroot status;

了解某个参数的具体信息
mysql --verbose --help | more

myisam:
key_buffer_size 设置:
首先看一下参数定义: mysql --verbose --help | grep key_buffer_size=
此参数是用来设置索引块缓存大小的
1.简历一个索引缓存:
set global host_cache2.key_buffer_size=128*1024;
2.修改一个索引缓存:
set global host_cache2.key_buffer_size=200*1024;

3.把相关的索引放到指定的索引缓存中:
cache index sales,sales2 in hot_cache2;
4.预装入默认 key_buffer 中,可以使用 load index into cache
load index into cache sales;
其中 sales 是索引,load index 是命令
5.删除索引缓存
set global hot_cache2.key_buffer_size=0;
但是不能删除默认的 key_buffer,即 set global key_buffer_size=0;没有效果,当你重新打开一个连接后,还是可以看到相应的参数数值
6.每次重启的时候都会把 key_buffer 的数据清空,如果要重启服务器的时候将索引自动放到 key_buffer 中,可以在配置文件中设置 init-file 选项来指定包含 cache index 语句的文件路径,然后再对应的文件中写入 cache index 语句
key_buffer_size = 4G
hot_cache.key_buffer_size = 2G
cold_cache.key_buffer_size = 2G
init_file = /path/to/data-directory/mysql_init.sql

在 mysql_init.sql 中写入:
CACHE INDEX a.t1, a.t2, b.t3 IN hot_cache;
CACHE INDEX a.t4, b.t5, b.t6 IN cold_cache;

table_cache 的设置
这个参数表示数据库用户打开表的缓存数量,每个连接进来,都会至少打开一个表缓存,因此,table_cache 与 max_connections 有关。对于 200 并行运行的连接,应该让表的缓存至少有 200 * N,这里的 N 表示执行查询的一个链接中表的最大数量。此外,还需要为临时表和文件保留一些额外的文件描述符。
通过检查 mysql 的状态变量 open_tables 和 opened_tables 确定这个参数是否过小,前者表示当前打开的表缓存数,执行 flush tables 操作,会关闭一些当前没有使用的表缓存而是的此状态值减小;后者表示曾今打开的表缓存数,会一直进行累加。

innodb:
innodb_buffer_pool_size 设置
定义 innodb 存储引擎的表数据和索引数据的最大内存缓冲区,这个值设置的越高,访问表中数据需要的磁盘 I/O 就越少。设置为机器物理内存的 80%,但是设置的太大对于操作系统对内存的调度产生竞争

innodb_flush_log_at_trx_commit 设置
用来控制缓冲区的数据写入到日志文件以及日志文件数据刷新到磁盘的操作时机,对这个参数的设置可以对数据库在性能与数据安全之间进行折中
1.当这个参数是0 的时候,每秒刷新一次日志缓存,写入到日志文件,并且对日志文件做向磁盘刷新的操作,但是一个事务提交不做任何操作
2.当这个参数是1 的时候,每个事务提交,日志缓冲写入到日志文件,并且对日志文件做向磁盘刷新的操作
3.当这个参数是2 的时候,每个事务提交,日志缓冲写入到日志文件,但不对日志文件做向磁盘刷新的操作,对日志文件每秒向磁盘做一次刷新操作

默认设置为1 ,也是最安全的设置。设置成0 ,只要数据库崩溃,那么就会丢失 1 秒钟的数据,这种方式是最不安全的。设置成 2 ,只要系统不崩溃,那么日志文件还是会记录操作的,就是不写入磁盘,比设置成0 更安全。

innodb_additional_mem_pool_size 设置
innodb 存储引擎用来存储数据库结构和其他内部数据结构的内存池的大小,默认值是 1MB. 数据库表越多,分配的内存越多。如果 Innodb 用光了这个内存,则 innodb 开始从操作系统分配内存,并且往 mysql 错误日志写警告信息。没有必要给这个缓冲池分配非常大的空间。在应用相对稳定的情况下,这个缓冲池的大小也相对稳定。

innodb_lock_wait_timeout 设置
自动检测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动检测,所以这个参数主要被用于在出现类似情况的时候等待指定的时间后回滚。系统默认值是 50 秒,用户可以根据应用的需要进行调整。

innodb_support_xa 设置
设置是否支持分布式事务,默认值是 ON 或者 1 , 表示支持分布式事务。如果不需要分布式事务,那么可以关闭这个参数,减少磁盘刷新次数。

innodb_log_buffer_size 设置
日志缓存大小,默认的设置在中等强度写入负载以及较短事务的情况下,一般都可以满足服务器的性能要求。如果存在更新操作峰值或者负载较大,就应该考虑加大他的值。如果他的值设置太高,可能会浪费内存,因为他每秒都会刷新一次,因此无需设置超过 1 秒所需的内存空间。通常设置为 8-16 MB, 越小的系统他的值越小,系统默认值为 1 MB

innodb_log_file_size 设置
含义是一个日志组 中每个日志文件的大小,此参数在高写入负载尤其是大数据集的情况下很重要。这个值越大则性能相对越高,但是带来的副作用是,当系统灾难时恢复时间会加大。系统默认值是 5MB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: