MySQL Service performance Optimization-my.cnf_my.ini configuration instructions (16G memory)

Source: Internet
Author: User
Tags one table

This configuration has been optimized well, if your MySQL has no special circumstances, you can directly use the configuration parameters


MySQL server MY.CNF configuration document detailed
Hardware: Memory 16G


[Client]
Port = 3306
Socket =/data/3306/mysql.sock

[MySQL]
No-auto-rehash

[Mysqld]
user = MySQL
Port = 3306
Socket =/data/3306/mysql.sock
Basedir =/usr/local/mysql
DataDir =/data/3306/data
Open_files_limit = 10240

Back_log = 600
#在MYSQL暂时停止响应新请求之前, the number of requests within a short period of time can be present on the stack. If the system has many connections in a short period of time, you need to increase the value of this parameter, which specifies the size of the listening queue for incoming TCP/IP connections. The default value is 50.

Max_connections = 3000
#MySQL允许最大的进程连接数, this value needs to be increased if the too many connections error is frequently present.

Max_connect_errors = 6000
#设置每个主机的连接请求异常中断的最大次数, when this number of times is exceeded, the MySQL server will disallow host connection requests until the MySQL server restarts or clears the host information through the flush hosts command.

Table_cache = 614
#指示表调整缓冲区大小. # Table_cache parameter sets the number of table caches. Each connection comes in with at least one table cache open. #因此, the size of the Table_cache should be related to the Max_connections setting. For example, for a 200 # parallel run connection, the table should have a cache of at least 200xN, where N is the maximum number of tables in a join of the query # that the application can execute. In addition, some additional file descriptors need to be reserved for temporary tables and files.
# when Mysql accesses a table, if the table is already open in the cache, it can access the cache directly, and if # has not been cached, but there is room in the MySQL table buffer, then the table is opened and put into the table slow # flush; If the table is full, the currently unused table will be released in accordance with certain rules , or temporarily expand the table cache to hold, the advantage of using table caching is that you can access the contents of the table more quickly. Execute flush tables # to empty the cached content. In general, you can determine if you need to increase the value of Table_cache (where Open_tables is the number of tables opened before #, by looking at the status value of the database running peak time open_tables #和 Opened_tables, Opened_ Tables is the number of tables that are already open). That is, if open_tables approach Table_cache, and opened_tables this value is gradually increasing, then consider increasing the size of this # value. There is table_locks_waited higher than the time, also need to increase the table_cache.


external-locking = FALSE
#使用 –skip-external-locking mysql option to avoid external locking. This option is turned on by default

Max_allowed_packet = 32M
#设置在网络传输中一次消息传输量的最大值. The system defaults to 1MB and the maximum value is 1GB, which must be set to a multiple of 1024.

#属重点优化参数 (I have a project on the Linux server because this parameter is not configured to error)

Sort_buffer_size = 2M
# sort_buffer_size is a connection-level parameter that allocates the set of memory once for the first time each connection (session) needs to use this Buffer.
#Sort_Buffer_Size is not as large as possible, because it is a connection-level parameter, too large a setting + high concurrency may deplete system memory resources. For example: 500 connections will consume 500*sort_buffer_size (8M) =4g memory
When the #Sort_Buffer_Size exceeds 2KB, memory allocations are made using mmap () rather than malloc (), resulting in reduced efficiency.
#技术导读 http://blog.webshuo.com/2011/02/16/mysql-sort_buffer_size/
#dev-doc:http://dev.mysql.com/doc/refman/5.5/en/server-parameters.html
#explain select*from table where order limit; appears Filesort

#属重点优化参数

Join_buffer_size = 2M
#用于表间关联缓存的大小, as with Sort_buffer_size, the allocated memory for this parameter is also exclusive to each connection.

Thread_cache_size = 300
# server thread Cache This value indicates that the number of threads stored in the cache can be re-used, and if there is room in the cache when disconnected, the client's thread will be placed in the cache, and if the thread is requested again, then the request will be read from the cache, if the cache is empty or a new request, Then this thread will be recreated, and if there are many new threads, adding this value can improve system performance. You can see the effect of this variable by comparing the variables of the Connections and threads_created states. Set the rules as follows: The 1GB memory configuration is 8,2gb configured to 16,3GB configured for 32,4GB or higher memory, which can be configured larger.

Thread_concurrency = 8
# Setting the value of the thread_concurrency is correct or not, the performance of MySQL is very significant, in the case of multiple CPUs (or multicore), the error set the value of Thread_concurrency, will cause MySQL can not fully utilize the multi-CPU (or multicore), Occurs at the same moment only one CPU (or core) is in the working condition. The thread_concurrency should be set to twice times the number of CPU cores. For example, there is a dual-core CPU, then the thread_concurrency should be 4; 2 Dual-core CPUs, the value of thread_concurrency should be 8
#属重点优化参数

Query_cache_size = 64M
# # for users who use MySQL, you will not be unfamiliar with this variable. In previous years of MyISAM engine optimization, this parameter was also an important optimization parameter. But with the development, this parameter also reveals some problems. The memory of the machine is getting bigger and larger, and people are accustomed to allocating the previously useful parameters more and more. This increase in parameters also raises a number of questions. Let's start by analyzing how Query_cache_size works: When a select query works in DB, the DB caches the statement, and when the same SQL comes back to the DB, the DB returns the result from the cache to the client if the table does not change. There is a shut-down point, that is, when DB is working with Query_cache, it requires that the table involved in the statement not be changed during this time period. So what happens to the data in Query_cache if the table is changed? The first thing to do is to invalidate the Query_cache and the table-related statements, and then write the update. So if the query_cache is very large, the query structure of the table is more, the query statement invalidation is slow, an update or insert will be very slow, so see is update or insert how slow. Therefore, in the database write volume or update volume is also relatively large system, this parameter is not suitable for allocation too large. And in high concurrency, write a large-scale system, it is recommended to disable this function.
#重点优化参数 (Main library additions and deletions changed-myisam)

Query_cache_limit = 4M
#指定单个查询能够使用的缓冲区大小, default is 1M

Query_cache_min_res_unit = 2k
#默认是4KB, setting a big value is good for big data queries, but if your queries are small data queries, it's easy to create memory fragmentation and waste.
#查询缓存碎片率 = Qcache_free_blocks/qcache_total_blocks * 100%
#如果查询缓存碎片率超过20%, you can use flush query cache to defragment the cache, or try to reduce query_cache_min_res_unit if your queries are small data volumes.
#查询缓存利用率 = (query_cache_size–qcache_free_memory)/query_cache_size * 100%
#查询缓存利用率在25% below indicates that the Query_cache_size setting is too large, can be appropriately reduced; query cache utilization is above 80% and Qcache_lowmem_prunes > 50 description query_cache_ Size may be a little bit small, or too much fragmentation.
#查询缓存命中率 = (qcache_hits–qcache_inserts)/qcache_hits * 100%

Default-storage-engine = MyISAM
#default_table_type = InnoDB

Thread_stack = 192K
#设置MYSQL每个线程的堆栈大小, the default value is large enough to satisfy normal operations. Can be set to a range of 128K to 4GB, the default is 192KB.

transaction_isolation = read-committed 
# Sets the default transaction isolation level. The available levels are as follows:
# read-uncommitted, read-committed, Repeatable-read, SERIALIZABLE
# 1.READ uncommitted-READ UNCOMMITTED 2.READ Committe-Read submitted 3.REPEATABLE read-repeatable read 4. SERIALIZABLE-Serial

tmp_table_size = 256M  
# tmp_table_size The default size is 32M. If a temporary table exceeds that size, MySQL produces an error in the form of the table tbl_name is, and if you do many advanced GROUP by queries, increase the tmp_table_size value. If this value is exceeded, the temporary table is written to disk.
max_heap_table_size = 256M
long_query_ Time = 2
log_long_format

#log-bin =/data/3306/mysql-bin
log-bin
binlog_cache_size = 4M
max_binlog_cache_size = 8M
max_ Binlog_size = 512M

Expire_logs_days = 7
Key_buffer_size = 2048M
#批定用于索引的缓冲区大小, increase it to get better index processing performance, the parameter can be set to 256MB or 384MB for a server that has around 4GB.

Read_buffer_size = 1M
# MySQL read into buffer size. A request to sequentially scan a table allocates a read-in buffer, and MySQL allocates a memory buffer for it. The read_buffer_size variable controls the size of this buffer. If the sequential scan requests for a table are frequent, and you think that frequent scans are going too slowly, you can improve their performance by increasing the value of the variable and the size of the memory buffer. As with Sort_buffer_size, the allocated memory for this parameter is also exclusive to each connection.

Read_rnd_buffer_size = 16M
# mysql Random read (query operation) buffer size. When rows are read in any order (for example, in sort order), a random read buffer is allocated. When you sort a query, MySQL scans the buffer first to avoid disk searches, improve query speed, and, if you need to sort large amounts of data, raise the value appropriately. However, MySQL will issue this buffer space for each client connection, so you should set this value as appropriately as possible to avoid excessive memory overhead.

Bulk_insert_buffer_size = 64M
#批量插入数据缓存大小, can effectively improve the efficiency of insertion, the default is 8M

Myisam_sort_buffer_size = 128M
# MyISAM the buffer required to reorder when the table is changed

Myisam_max_sort_file_size = 10G
# The size of the maximum temporary file allowed when MySQL rebuilds the index (when REPAIR, ALTER TABLE or LOAD DATA INFILE).
# If the file size is larger than this value, the index will be created by the key buffer (slower)

Myisam_max_extra_sort_file_size = 10G
Myisam_repair_threads = 1
# If a table has more than one index, MyISAM can use more than one thread to fix them by using parallel sorting.
# This is a good choice for users with multiple CPUs and a lot of memory.

Myisam_recover
#自动检查和修复没有适当关闭的 MyISAM Table
Skip-name-resolve
Lower_case_table_names = 1

Server-id = 1

Innodb_additional_mem_pool_size = 16M
#这个参数用来设置 the memory pool size of the data directory information and other internal data structures stored by the InnoDB, similar to Oracle's library cache. This is not a mandatory parameter and can be breached.

Innodb_buffer_pool_size = 2048M
# This is very important for the InnoDB table . InnoDB is more sensitive to buffering than the MyISAM table. MyISAM can be run under the default Key_buffer_size settings, but InnoDB is snail-like under the default Innodb_buffer_pool_size settings. Since InnoDB caches both data and indexes, there is no need to leave too much memory on the operating system, so if you only need to use InnoDB, you can set it up to 70-80% of usable memory. Some rules apply to Key_buffer-if your data volume is small and does not increase, then you do not need to set the innodb_buffer_pool_size too large

Innodb_data_file_path = Ibdata1:1024m:autoextend
#表空间文件 Important data

Innodb_file_io_threads = 4
#文件IO的线程数, typically 4, but under Windows, you can set it larger.

Innodb_thread_concurrency = 8
#服务器有几个CPU就设置为几, the default setting, typically 8, is recommended.

Innodb_flush_log_at_trx_commit = 2
# If this parameter is set to 1, the log will be written to disk after each commit transaction. To provide performance, you can set to 0 or 2, but assume the risk of losing data in the event of a failure. A setting of 0 indicates that the transaction log is written to the log file, and the log file is flushed to disk once per second. A setting of 2 indicates that the transaction log will be written to the log at commit time, but the log file is flushed to disk one at a time.

Innodb_log_buffer_size = 16M
#此参数确定些日志文件所用的内存大小, in M. Larger buffers can improve performance, but unexpected failures will cause data loss. MySQL developer recommends setting the 1-8m between

Innodb_log_file_size = 128M
#此参数确定数据日志文件的大小, in M, larger settings can improve performance, but also increase the time it takes to recover a failed database

Innodb_log_files_in_group = 3
#为提高性能, MySQL can write log files to multiple files in a circular fashion. Recommended set to 3M

innodb_max_dirty_pages_pct = 90
#推荐阅读 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html
# The amount of dirty_page in Buffer_pool directly affects the closing time of the InnoDB. The parameter innodb_max_dirty_pages_pct can directly control the ratio of dirty_page in Buffer_pool, and fortunately innodb_max_dirty_pages_pct can be changed dynamically. Therefore, the innodb_max_dirty_pages_pct is reduced before closing the InnoDB, forcing the data block to flush for a period of time, which can greatly shorten the time of MySQL shutdown.

Innodb_lock_wait_timeout = 120
# InnoDB has its built-in deadlock detection mechanism that can cause incomplete transactions to be rolled back. However, if you combine InnoDB with a MYISAM lock tables statement or a third-party transaction engine, the INNODB does not recognize the deadlock. To eliminate this possibility, you can set Innodb_lock_wait_timeout to an integer value that indicates how long (in seconds) the MySQL waits before allowing other transactions to modify data that is eventually rolled back by the transaction.

innodb_file_per_table = 0
#独享表空间 (OFF)

[Mysqldump]
Quick
Max_allowed_packet = 32M

[Mysqld_safe]
Log-error=/data/3306/mysql_oldboy.err
Pid-file=/data/3306/mysqld.pid

#补充
#wait_timeout = 10
#指定一个请求的最大连接时间, it can be set to 5-10 for a memory server around 4GB.
#skip_networking
#开启该选可以彻底关闭MYSQL的TCP/IP connection, do not turn on this option if the Web server is accessing the MySQL database server remotely, otherwise it will not connect properly.

#log-queries-not-using-indexes
A query that does not use an index is also recorded

Reference: http://www.jb51.net/article/83569.htm

MySQL Service performance Optimization-my.cnf_my.ini configuration instructions (16G memory)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.