存档

‘Mysql数据库相关’ 分类的存档

mysql压测后记

2013年8月9日 没有评论

在压测过程中走了一点弯路,记录下。
1 最初压测只是单进程,对mysql的压力上不去,当时认为mysql可能能力就是这样了,后来估算了线上数据的情况,我测试的结果跟线上差的比较多。后想到用多线程跑下,结果比较理想。

2 多线程压测时innodb_thread_concurrency = 16 (这个参数被调到128失败)
在压测过程中,发现show engine innodb status 中大量在队里中等待的insert,手册上建议根据cpu核数硬盘数量调整,但是我想尝试多开线程的效果,果断调整为128,结果测试效果不是很好,只有正常值的70%左右,故又根据手册调整回原来数值。

3 perl的DBI 包应该是非线程安全的,创建连接后共享给线程,在线程里调用的话会报错。所以果断采用在线程内创建连接,每个线程使用自己创建的连接,这样就ok了,而且比单连接内多线程效果还给力。(另这个就要mysql的最大连接数配合了)

分类: Mysql数据库相关 标签:

mysql写性能测试记录二

2013年8月8日 没有评论

环境同上篇

1台施压服务器压测单mysqld实例
insert value 200 (每insert 插入200条数据)
4core8g  
200thread  13600 insert/s
iostat (以下指标为平均值)
wkB/s: 37104 wkB/s 平均37M左右
await: 62.94ms
%util: 91.85
dstat
csw:5000  上下文切换

2台施压服务器压测单服务器2 mysqld实例,3306/3307
insert value 200 (没insert 插入200条数据)
4core8g  
200thread  15000 insert/s
iostat (以下指标为平均值)
wkB/s: 40026 wkB/s 平均40M左右
await: 110ms
%util: 99.9
dstat
csw:5000  上下文切换

结论:
1、 insert value 200 可以充分挖掘mysql的写入能力,显著提高插入效率,所以开发同学拼sql时最好单insert多value方式拼写。
2、 单机多mysqld实例对于挖掘服务器写入有一定提升,通过测试大概能提升10%,但是和实例数增加不成线性关系,效果不显著。
3、 insert value 200 单mysqld实例时,磁盘IO已经接近瓶颈(%util: 91.85),所以单机多实例在大量写入的场景意义不大。
分类: Mysql数据库相关 标签:

mysql写性能测试记录一

2013年8月7日 没有评论

背景:最近在考虑扩容预案(散库or散表or散实例),各种预案都需要场景数据支持。check是否符合预期。
环境:
云服务器 CentOS release 6.3 (Final) x64
4core8g
4core16g
2core4g
写入表结构:
CREATE TABLE `stest` ( `a1` int(11) DEFAULT NULL, `a2` int(11) DEFAULT NULL, `a3` varchar(255) DEFAULT NULL, `a4` varchar(100) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
无主键无索引
mysql配置文件:测试过程中保持一致
关键参数
innodb_flush_log_at_trx_commit = 0
innodb_thread_concurrency = 16
innodb_io_capacity default
max_connections = 10000
innodb_file_per_table=1
innodb_flush_method default
阅读全文…

分类: Mysql数据库相关 标签:

mysql维护技巧n例

2013年6月28日 没有评论

mark下
1 通过tcpdump抓取sql语句

tcpdump -i eth0 -s 0 -l -w - dst port 3307 | strings

2 kill 慢查询

echo "show processlist" | mysql -uroot -p123| grep Sleep | awk '{ if( $6> 60 ) print ("kill", $1, ";")}' | mysql -uroot -p123

3 multi方式 启停实例

mysqld_multi --defaults-file=/mysqldata/3307/my.cnf --user=root --password=123 stop 3307
mysqld_multi --defaults-file=/mysqldata/3307/my.cnf --user=root --password=123 start 3307
在配置好配置文件启动前,需要手动创建文件目录
cd 3307
mkdir data log-bin-files log-files
cd ..
chown -R  mysql:mysql 3307/
初始化
cd /data/software/mysql/scripts/
./mysql_install_db --basedir=/data/software/mysql --datadir=/data/mysql_data/3307/data --user=mysql

4 忽略错误

#    &MysqlQuery( $this_dbh, "slave stop" );
#    &MysqlQuery( $this_dbh, "set GLOBAL SQL_SLAVE_SKIP_COUNTER=1" );
#    &MysqlQuery( $this_dbh, "slave start" );

5 分析慢查询

mysqldumpslow -s c -t 10 /data/mysql_data/3306/log-files/slow_queries.log
分类: Mysql数据库相关 标签:

Mysql 保留字

2013年6月19日 1 条评论

在列、表命名时候需要注意不要使用mysql保留字。下表所列内容有个特殊的地方,就是有几个符号是被ANSI SQL禁止的,但仍然可以被 MySQL 用于列/表名。这是由于用他们命名符合使用习惯并已经有很多人在使用了它们。可用于MYSQL列/表名的如下即可特殊单词(但是不建议使用):ACTION/BIT /DATE /ENUM /NO /TEXT /TIME /TIMESTAMP/。

MySQL的系统保留字一览表
阅读全文…

分类: Mysql数据库相关 标签:

MySQL不会用到索引的几种情况

2013年6月19日 没有评论

最近在优化业务时遇到了索引使用问题,然后稍微总结了下mysql不会用到索引的几种情况,后期遇到会继续添加。

以下测试都是在test表中进行。该表的表结构为:

CREATE TABLE `test` (
`a` int(11) NOT NULL DEFAULT ’0′,
`b` char(10) DEFAULT NULL,
`c` char(20) DEFAULT NULL,
`d` char(10) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `b_c` (`b`,`c`),
KEY `idx_d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

阅读全文…

分类: Mysql数据库相关 标签:

mysql 关闭慢问题

2013年6月19日 没有评论

本文是转帖,mark一下

如果用的引擎是InnoDB,每次敲下mysqladmin -uroot -p shutdown关闭数据库的时候,总是很难预测这个命令会执行多久,实际经验表明,短则五秒,长则三十分钟一小时都有可能。也分享一下我的经验吧。
1. 为什么InnoDB关闭会慢?
阅读全文…

分类: Mysql数据库相关 标签:

采用ssh加密方式进行公网mysql主从同步

2013年6月19日 没有评论

采用ssh加密方式,进行mysql主从同步

ssh -i p.pem -p 2248 -f remoteip -L localip:2345:remoteip:3306 -N

配置主从时,如下
master_host=’localip’,master_port=2345

分类: Mysql数据库相关 标签:

percona-xtrabackup全量恢复数据库一例

2013年6月19日 没有评论

目标服务器环境:
现存以multi模式启动端口为3306的实例。
所以需再恢复到以multi模式启动端口为3307的实例中。

1. 从备份机拷贝备份文件到目标服务器
scp server@/data/backup/db.tar.gz ./

2. 目标服务器需安装percona-xtrabackup-2.0.3,/data/percona-xtrabackup-2.0.3/bin/加入PATH

3. 由于备份的配置文件是multi方式,需要改成single模式。修改配置文件mycnf
注意serverid,port(port为3307),和相关路径

[mysqld3306] => [mysqld]

阅读全文…

分类: Mysql数据库相关 标签:

Mysql insert测试2

2013年6月6日 没有评论

Mysql insert测试2
版本:
mysql版本:5.1.40

测试涉及参数:

innodb_buffer_pool_size = 10240M

i)
innodb_flush_log_at_trx_commit=0
Speed: 8196 inserts/s

ii)
innodb_flush_log_at_trx_commit=2
Speed: 7462 inserts/s

这是在DELL R410 做的测试,0和2的时候差别不大,所以重要性级别为一般的应用设置为2是最佳选择。通过测试也能看出 DELL R410 如果做主库主要负责写入的话,根据现在的访问量评估,应该不成问题,所以主库还是不建议用特别好的硬件扛,用性能比较好的就可以了。
最好还是根据应用拆分数据库,这样一旦主库出现问题,可以随时找到一台性能相近的server代替,不会因为主库的服务器过于强大,而无其他server能代替。这也算一种分担风险的方法吧。

分类: Mysql数据库相关 标签: