Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1679125
  • 博文数量: 391
  • 博客积分: 8464
  • 博客等级: 中将
  • 技术积分: 4589
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 15:12
个人简介

狮子的雄心,骆驼的耐力,孩子的执著!

文章分类

全部博文(391)

文章存档

2023年(4)

2018年(9)

2017年(13)

2016年(18)

2014年(7)

2013年(29)

2012年(61)

2011年(49)

2010年(84)

2009年(95)

2008年(22)

分类: Mysql/postgreSQL

2013-07-15 14:57:29

在优化mysql,其中很多人都在配置文件中添加了thread_concurrency,大多数人给出的描述是:

“设置thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。

thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4; 2个双核的cpu, thread_concurrency的值应为8.”

具体修改方法是:

[mysqld]

thread_concurrency=8

mysql thread_cache_size默认配置thread_cache_size=8,根据调查发现以上服务器线程缓存 thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么 客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的 线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。

建议根据物理内存设置规则如下:
1G => 8,2G => 16,3G => 32,大于3G => 64

InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收 缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。

在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table参数。

可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。

独立表空间:

优点:

1. 每个表都有自已独立的表空间。
2. 每个表的数据和索引都会存在自已的表空间中。
3. 可以实现单表在不同的数据库中移动。
4. 空间可以回收(除drop table操作处,表空不能自已回收)

a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。

b) 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。

c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

缺点:

单表增加过大,如超过100个G。

结论:

共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一 下:innodb_open_files 。

InnoDB Hot Backup(冷备)的表空间cp不会面对很多无用的copy了。而且利用innodb hot backup及表空间的管理命令可以实现单现移动。

1.innodb_file_per_table设置.开启方法:
在my.cnf中[mysqld]下设置
innodb_file_per_table=1

2.查看是否开启:
mysql> show variables like ‘%per_table%’;

3.关闭独享表空间
innodb_file_per_table=0关闭独立的表空间
mysql> show variables like ‘%per_table%’;

更多Mysql Innodb 引擎优化

背景:
在缺省情况下,启动mysql会绑定所有本机IP。为了加强系统的,mysql只允许绑定在内部IP。

实现方法
将mysql绑定内部IP方法有两种,方法实现如下:
方法一
在mysql的localstatedir(安装mysql的时候使用configure --localstatedir=DIR指定,缺省目录为$MYSQL_HOME/var,这里的$MYSQL_HOME是指mysql的目录)增加一个名为my.cnf文件。my.cnf
文件内容如下:
[mysqld]
bind-address= IP(此IP为需要绑定的IP地址)

方法二
使用safe_mysqld启动mysql时候,多加一参数”--bind-address=IP”指定mysqld绑定的IP地址。

例如:
启动mysqld使用的命令行为:
/usr/local/mysql/bin/safe_mysqld --bind-address=192.168.10.26 -uroot &

建议采用方法一实现将mysql绑定在内部IP。
一般情况下,mysql 绑定到一个内部IP就可以了,如果需要绑定多个内部IP,就采用缺省方式启动mysql,同时将外部IP对应的网卡down下来。


阅读(3201) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~