Mysql数据库操作系统及配置参数优化

  • 数据库结构优化

    表的水平拆分
    常用的水平拆分方法为:
    1.对 customer_id进行 hash运算,如果要拆分成5个表 则使用mod(customer_id,5)取出0-4个值
    2.针对不同的 hashID 把数据存到不同的表中。
    挑战:
    1.跨分区表进行数据查询
    2.统计及后台报表操作

  • 操作系统配置优化

    数据库是基于操作系统的,目前大多数MySQL都是安装在Linux系统之上,所以对于操作系统的一些参数配置也会影响到MySQL的性能,下面就列出一些常到的系统配置。
    网给方面的配置, 要修改/etc/sysctl.conf文件
    增加tcp支持的队列数
    net.ipv4.tcp_max_syn_backlog = 65535
    减少断开连接时 ,资源回收
    net.ipv4.tcp_max_tw_buckets = 8000
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_fin_timeout = 10

  • 打开文件的限制
    可以便用ulimit -a目录的刍各位限制,可以修改/etc/security/limits.conf文件 增加以下内容以修改打开文件数量的限制
    *soft nofile 65535
    *hard nofile 65535
    除此之外最好在MySQL服务器上关闭iptables,selinux 等防火墙软件。
  • MySQL配置文件

    Linux系统中MySQl配置文件一般位于/etc/my.cnf
    MySQL配置文件一常用参数说明
    innodb_buffer_pool_size
    非常重要的一个参数 ,用于配置Innodb的缓冲池,如果数据库中只有Innodb表,
    则推荐配置量为总内存的75%(这个前提是这个服务器只用做Mysql数据库服务器).
    SELECT ENGINE,
    ROUND(SUM(data_length + index_length)/1024/1024,1) AS ‘Total MB",FROM INFORMATION_SCHEMA.TABLES WHERE table_schema not in
    ("information_schema", "performance schema")
    GROUP BY ENGINE;
    Innodb_buffer_pool_size>=Total MB
    innodb_buffer_pool_instances
    MySQL5.5中新增参数,可以控制缓冲池的个数,默认情况下只有一个缓冲池。
    innodb_log_buffer_size
    innodb log缓冲的大小,由于日志最长每秒钟就会刷新所以一般不用太大。
    innodb_flush_log_at_trx_commit
    关键参数,对innodb的IO影响很大。默认值为1,可以取0,1,2三个值,一般建议设为2,但如果数据安全性要求比较高则使用默认值1.
    innodb_read_io_threads
    innodb_write_io_threads
    以上两个参数决定了Innodb读写的IO进程数,默认为4.
    innodb_file_per_table
    关键参数控制Innodb每一个表使用独立的表空间,默认是OFF,也就是所有表都会建立在共享表空间里,建议为ON.
    innodb_stats_on_metadata
    决定了MySQL在什么情况下会刷新innodb表的统计信息。
    max_connections
    很多开发人员都会遇见”MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力;另一种原因就是MySQL配置文件中max_connections值过小。
    首先,我们来查看mysql的最大连接数:
    mysql> show variables like ‘%max_connections%‘;
    +-----------------+-------+
    | Variable_name | Value |
    +-----------------+-------+
    | max_connections | 151 |
    +-----------------+-------+
    1 row in set (0.00 sec)

其次,查看服务器响应的最大连接数:
mysql> show global status like ‘Max_used_connections‘;
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 2 |
+----------------------+-------+
1 row in set (0.00 sec)

可以看到服务器响应的最大连接数为2,远远低于mysql服务器允许的最大连接数值。
对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。
Max_used_connections / max_connections 100% = 2/151 100% ≈ 1%

我们可以看到占比远低于10%(因为这是本地测试服务器,结果值没有太大的参考意义,大家可以根据实际情况设置连接数的上限值)。
再来看一下自己 linode VPS 现在(时间:2013-11-13 23:40:11)的结果值:
mysql> show variables like ‘%max_connections%‘;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.19 sec)
mysql> show global status like ‘Max_used_connections‘;
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 44 |
+----------------------+-------+
1 row in set (0.17 sec)

这里的最大连接数占上限连接数的30%左右。
上面我们知道怎么查看mysql服务器的最大连接数值,并且知道了如何判断该值是否合理,下面我们就来介绍一下如何设置这个最大连接数值。
方法1:
mysql> set GLOBAL max_connections=256;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like ‘%max_connections%‘;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 256 |
+-----------------+-------+
1 row in set (0.00 sec)

方法2:
修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
max_connections=128
重启mysql服务即可。

参考:
mysql优化连接数防止访问量过高的方法
性能优化之MySQL优化

来自为知笔记(Wiz)

时间: 2024-10-19 00:23:57

Mysql数据库操作系统及配置参数优化的相关文章

mysql数据库的安装以及常见优化设置

原文:mysql数据库的安装以及常见优化设置 本文根据优才网课程整理,面向web开发者,内容以实用为主,专业DBA可以绕行. 如果你在大公司,可能有专门的DBA来做这些事情,如果你在一个小公司当架构师或者技术总监,或者你自己创业,那DBA的活你也得干了.咱们来讲一下基本的mysql安装和优化. 一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单:RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo a

Mysql数据库调优和性能优化

1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常的差,仅仅是一个玩具数据库.因此在产品中使用MySQL数据库必须进行必要的优化. 优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化. 2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,和

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

m2014-architecture-webserver->百万记录级mysql数据库及Discuz!论坛优化

作者:shunz,出处:http://shunz.net/2008/06/mysql_discuz_.html 最近,帮一个朋友优化一个拥有20万主题,100万帖子,3万多会员,平均在线人数2000人的Discuz!论坛,采用Linux2.6+Apache2+mod_php5+MySQL5,服务器配置为双至强+4G内存,优化前,系统平均负载(load average)基本维持在10以上,MySQL的CPU占用率基本在90%以上,优化后,系统平均负载降到0.5以下,MySQL的CPU占用率很少有超

菜鸟的《Linux程序设计》学习(8):MySQL数据库安装、配置及基本操作

1. MySQL数据库: 在涉及到一些大型的Web系统或者嵌入式软件的开发时,都少不了用数据库来管理数据.在Windows操作系统下,使用过各种各样的数据库,如:sqlServer.Oracle.MySQL等等,我们知道,在Windows系统上的软件安装配置都是界面式,操作明显而简捷. 那么在Linux操作系统上,对于数据库的选用,好像首推的是MySQL,它是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保

Mysql的安装、配置、优化

Mysql的安装.配置.优化 安装步骤 1.先单击中的安装文件,如果是win7系统,请选择以管理员的方式运行. 2.大概需要30秒的时间,开始进入安装界面.请先把标红的打勾,好进行下一步的动作. 3.在选择安装类别的时候,选择第二个“Server only”,选择这个类型的安装比较简单,不需要进行特殊的配置. 4.配置好了之后,直接点击“next”就开始mysql的安装了.安装大概需要一分钟的时间,等看到下图2中标红的“complete”时,直接点击next进行下一步操作. 5.这一步是要进行类

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定

MYSQL配置参数优化详解

目录 1)连接请求的变量 1.max_connections 2.back_log 3.wait_timeout和interative_timeout 2)缓冲区变量 4.key_buffer_size 5.query_cache_size(查询缓存简称QC) 6.max_connect_errors: 7.sort_buffer_size: 8.max_allowed_packet=32M 9.join_buffer_size=2M 10.thread_cache_size=300 3)配置I

MySQL数据库my.cnf性能参数如何调优

提供一个MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件.配置文件可以到这里下载:: 下载my.cnf [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql pid-file = /data/mysql/mysql.pid user = mysql b