Chr*_*nch 8 mysql innodb performance
我正在运行 1gb 的 RAM 机架空间数据库服务器。出于某种原因,在大约 2 天内,内存使用量从使用很少的交换变为使用 100mb。如果我不重新启动 sql,它将继续使用更多的交换。(我的 my.cnf 文件如下所示,内存使用情况如下所示)
一些背景:我有大约 50 个活动数据库,它们具有相同的模式,这些数据库使用 INNODB 来处理表。我有几个使用 MyISAM 的流量很少的数据库。
在 INNODB 表上,我不使用持久连接。我还有一个创建临时表的报告功能。(这可能是资源密集型的,但并不经常发生)
我正在使用 CENTOS 6.3 和 mysql 5.5.28-log
即使我使用的是swap,性能仍然相当不错。我只是担心如果我每隔几天不重新启动我就会出问题。
这是我大约 2 天的 free -m 日志:(第一条记录是在 mysql 重新启动后)
12/26 2:08 PM EST
total used free shared buffers cached
Mem: 992 697 295 0 74 362
-/+ buffers/cache: 260 732
Swap: 976 15 961
12/26 4:10 PM EST
[root@php-pos-db ~]# free -m
total used free shared buffers cached
Mem: 992 791 201 0 97 405
-/+ buffers/cache: 287 705
Swap: 976 14 961
12/27 2:52 PM EST
[root@php-pos-db ~]# free -m
total used free shared buffers cached
Mem: 992 947 45 0 55 169
-/+ buffers/cache: 722 270
Swap: 976 34 942
12/28 1:41 PM EST
total used free shared buffers cached
Mem: 992 963 29 0 45 119
-/+ buffers/cache: 797 195
Swap: 976 48 927
12/28 7:24 PM EST
[root@php-pos-db ~]# free -m
total used free shared buffers cached
Mem: 992 957 35 0 41 141
-/+ buffers/cache: 774 218
Swap: 976 90 886
12/28 8:33 PM EST
[root@php-pos-db ~]# free -m
total used free shared buffers cached
Mem: 992 948 44 0 48 130
-/+ buffers/cache: 768 224
Swap: 976 96 880
Run Code Online (Sandbox Code Playgroud)
我的.cnf
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html
#
# Take care to only add/remove/change a setting if you are comfortable
# doing so! For Rackspace customers, if you have any questions or
# concerns, please contact the MySQL Database Services Team. Be aware
# that some work performed by this team can involve additional billable
# fees.
#
# This file generated for host php-pos-db please modify
# variables if the server is resized from 1016636kB
[mysqld]
### General
user = mysql
port = 3306
datadir = /var/lib/mysql
tmpdir = /tmp
socket = /var/lib/mysql/mysql.sock
skip-external-locking = 1
log_error = /var/log/mysqld.log
## This prevents using host-based authentication. That means users must be
## created using an ip-address (ie 'myuser'@'192.168.100.1') or must make
## use of the % wildcard (ie 'myuser'@'%'). The benefit to not using
## host-based authentication is that DNS will not impact MySQL performance.
#skip-name-resolve
## If open-files-limit is set very low, MySQL may increase on its own. Either
## way, increase this if MySQL gives 'too many open files' errors. Setting
## this above 65535 could be unwise (MySQL may crash).
open-files-limit = 20000
### Cache
thread-cache-size = 16
table-open-cache = 4096
table-definition-cache = 512
## Generally, it is unwise to set the query cache to be larger than 64-128M
## as the costs associated with maintaining the cache outweigh the performance
## gains. A far superior solution would be to implement memcached, though this
## required modifying the application, among other things.
query-cache-type = 1
query-cache-size = 32M
query-cache-limit = 1M
### Per-thread Buffers
sort-buffer-size = 1M
read-buffer-size = 1M
read-rnd-buffer-size = 2M
join-buffer-size = 1M
### Temp Tables
tmp-table-size = 64M
max-heap-table-size = 64M
### Networking
back-log = 100
max-connections = 50
max-connect-errors = 10000
max-allowed-packet = 16M
interactive-timeout = 600
wait-timeout = 180
net_read_timeout = 30
net_write_timeout = 30
# This value is the size of the listen queue for incoming TCP/IP connections.
back_log = 128
#### Storage Engines
## Set this to force MySQL to use a particular engine / table-type
## for new tables. This setting can still be overridden by specifying
## the engine explicitly in the CREATE TABLE statement.
default-storage-engine = InnoDB
## Makes sure MySQL does not start if InnoDB fails to start. This helps
## prevent ugly silent failures.
innodb = FORCE
### MyISAM
## Not sure what to set this to?
## Try running a 'du -sch /var/lib/mysql/*/*.MYI'
## This will give you a good estimate on the size of all the MyISAM indexes.
## (The buffer may not need to set that high, however)
key-buffer-size = 2M
## This setting controls the size of the buffer that is allocated when
## sorting MyISAM indexes during a REPAIR TABLE or when creating indexes
## with CREATE INDEX or ALTER TABLE.
myisam-sort-buffer-size = 2M
### InnoDB
## Note: While most settings in MySQL can be set at run-time, many InnoDB
## variables cannot be set at runtime as require restarting MySQL
###
## These settings control how much RAM InnoDB will use. Generally, when using
## mostly InnoDB tables, the innodb-buffer-pool-size should be as large as
## is possible without swapping or starving other processes of RAM. The other
## two settings usually do not need to be changed, but can help for very large
## datasets.
innodb-buffer-pool-size = 285M
innodb-log-buffer-size = 8M
## Be careful when changing these as they require re-generating the
## ib-logfile* files, which must be done carefully. Do not change this unless
## you are familiar with the procedure.
innodb-log-file-size = 128M
innodb-log-files-in-group = 2
## This will cause each table to create its own .ibd file
innodb-file-per-table = 1
## Setting this to 2 will decrease disk I/O but can cause up to a second of
## queries to be lost during a hard outage (i.e. power failures)
# innodb-flush-log-at-trx-commit = 2
### Replication
## Set this to the Server's instance ID in replication environments
server-id = 1
#log-bin = /var/lib/mysql/bin-log
#relay-log = /var/lib/mysql/relay-log
#relay-log-space-limit = 4G
#expire-logs-days = 5
## This should be enabled on conventional MySQL slaves
#read-only = 1
## This will cause replicated statements on a slave to be written to the slave's binlog
## Enable this on the middle slave of M->S->S configs
#log-slave-updates = 1
#binlog-format = STATEMENT
### Logging
## This option determines the destination for general query log and slow query log output.
## The option value can be given as one or more of the words TABLE, FILE, or NONE.
## NOTE: Table logging takes away 50% of performance and thus is not recommended
## http://bugs.mysql.com/bug.php?id=30414
## In addition, you cannot backup the contents of these tables properly
## (mysqldump skips these tables by default since they cannot be locked)
#log-output = FILE
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/slow-log
long-query-time = 2
log-queries-not-using-indexes = 1
[mysqld-safe]
log-error = /var/log/mysqld.log
[mysqldump]
max-allowed-packet = 16M
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/sysconfig/mysqld-config/
Run Code Online (Sandbox Code Playgroud)
MySQL 确实有交换快乐的坏习惯。Jeremy Cole 在他的博客中最好地解决了这个问题:http : //blog.jcole.us/2012/04/16/a-brief-update-on-numa-and-mysql/。从该博客中,您了解到您可以执行以下操作:numactl --interleave=all在 /etc/init.d/mysql 中添加。
如果服务器专用于仅执行 MySQL,请在 /etc/my.cnf 中更改以下内容:
[mysqld]
innodb_open_files=1000
innodb_flush_method=O_DIRECT
innodb_buffer_pool_size=768M
innodb_log_file_size=192M
Run Code Online (Sandbox Code Playgroud)
如果服务器至少是双核,请添加这些
innodb_buffer_pool_instances=2
innodb_read_io_threads=16
innodb_write_io_threads=16
innodb_io_capacity=2000
Run Code Online (Sandbox Code Playgroud)
接下来,登录mysql运行 SET GLOBAL innodb_fast_shutdown = 0;
接下来,在操作系统中运行以下命令
cd /var/lib/mysql
service mysql stop
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
service mysql start
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
从你最后的评论
它停止了大约 1 GB 的爬升。我删除了未使用的数据库,似乎 mysql 5.5 在内存中存储了大量数据,因为这在 5.0 中没有发生。mysql 变化很大吗?
是的,MySQL 发生了很大变化。事实上,从 MySQL 5.0 升级到 MySQL 5.5 导致性能下降的情况很多。InnoDB 5.5 现在可以进行超线程和多核交互。
请阅读我过去关于此主题的帖子
Jul 16, 2012:从 mysql server 5.0 迁移到 5.5 时存储过程的性能降低Nov 24, 2011:为什么 mysql 5.5 比 5.1 慢(linux,使用 mysqlslap)Oct 05, 2011:查询在一些较新的 MySQL 版本中运行时间较长Sep 20, 2011:多核和 MySQL 性能Jun 19, 2011:如何正确执行 MySQL 烘焙?我也在 ServerFault 和 StackOverflow 中写过这个
Feb 22, 2012: https://serverfault.com/questions/362388/mysql-5-1-vs-mysql-5-5-5-1-twice-as-fast/362706#362706Feb 08, 2012:https : //stackoverflow.com/questions/9202825/mysql-5-5-perfomance/9202860#9202860| 归档时间: |
|
| 查看次数: |
21687 次 |
| 最近记录: |