最近咱们一直在更新MySQL性能优化,内容也是由浅及深,如果有朋友哪里还不清楚,随时联系小编,咱们共同探讨进步。今天,咱们继续更新——优化MySQL服务器。
优化MySQL服务器主要从两个方面来优化,一方面是对硬件进行优化;另一方面是对MySQL服务的参数进行优化。这部分的内容需要较全面的知识,一般只有专业的数据库管理员才能进行这一类的优化。对于可以定制参数的操作系统,也可以针对MySQL进行操作系统优化。
优化服务器硬件
服务器的硬件性能直接决定着MySQL数据库的性能硬件的性能瓶颈直接决定MySQL数据库的运行速度和效率。针对性能瓶颈,提高硬件配置,可以提高MySQL数据库的查询、更新的速度。
(1)配置较大的内存。足够大的内存,是提高MySQL数据库性能的方法之一。内存的速度比磁盘I/0快得多,可以通过增加系统的缓冲区容量,使数据在内存停留的时间更长,以减少磁盘I/O。
(2)配置高速磁盘系统,以减少读盘的等待时间,提高响应速度。
(3)合理分布磁盘IO,把磁盘I/O分散在多个设备上,以减少资源竞争,提高并行操作能力。
(4)配置多处理器,MySQL是多线程的数据库,多处理器可同时执行多个线程。
优化MySQL的参数
通过优化MySQL的参数可以提高资源利用率,从而达到提高MySQL服务器性能的目的。
MySQL服务的配置参数都在my.cnf或者my.ini文件的[MySQLd]组中。下面对几个对性能影响比较大的参数进行详细介绍。
key_buffersize:表示索引缓冲区的大小。索引缓冲区所有的线程共享。增加索引缓冲区可以得到更好处理的索引(对所有读和多重写)。当然,这个值也不是越大越好,它的大小取决于内存的大小。如果这个值太大,导致操作系统频繁换页,也会降低系统性能。table_cache:表示同时打开的表的个数。这个值越大,能够同时打开的表的个数越多。这个值不是越大越好,因为同时打开的表太多会影响操作系统的性能。query_cache_size.:表示查询缓冲区的大小。该参数需要和query,_cache__type配合使用。当query.cache_type值是0时,所有的查询都不使用查询缓冲区。但是query_cache.type=0并不会导致MySQL释放query__cache.size所配置的缓冲区内存。当query.cache.type=I时,所有的查询都将使用查询缓冲区,除非在查询语句中指定SQL_NO_CACHE,如SELECTSQL_NO_CACHE*FROMtblname,当query_cache.type=2时,只有在查询语句中使用SQL_CACHE关键字,查询才会使用查询缓冲区。使用查询缓冲区可以提高查询的速度,这种方式只适用于修改操作少且经常执行相同的查询操作的情况。sortbuffer.size:表示排序缓存区的大小。这个值越大,进行排序的速度越快。read.buffersize:表示每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。当线程从表中连续读取记录时需要用到这个缓冲区。SETSESSIONread_buffersize-n可以临时设置该参数的值。read_md_buffer_size:表示为每个线程保留的缓冲区的大小与readbuffersize相似。但主要用于存储按特定顺序读取出来的记录。也可以用SETSESSIONread_mdbuffersize=n来临时设置该参数的值。如果频繁进行多次连续扫描,可以增加该值。innodb_bufferpoolsize:表示InnoDB类型的表和索引的最大缓存。这个值越大,查询的速度就会越快。但是这个值太大会影响操作系统的性能。max_connections:表示数据库的最大连接数。这个连接数不是越大越好,因为这些连接会浪费内存的资源。过多的连接可能会导致MySQL服务器僵死。innodb_flush_log_at_trx_