Coder,肖德时的个人BLOG

Entries Tagged as 'MysqlDBA'

Mysql的最佳实践-选择最优的Mysql版本

十二月 4th, 2008 · No Comments


这段时间的经验总结
1、选择精简有效的版本是我们首先需要解决的。这里已经有专家作了当前最全面的评测,一句话:如果你准备构建Mysql,请选择5.0.x版本。下载源直接从Mysql.com下载即可,当然还有更好的选择这个版本
2、Mysql表设计原则,肯定大家各有一套。经过这些年的磨砺,今天我也就两个经典疑问说说
第一个问题是:表里要不要设计id字段?
答:大部分表里都需要加一个这样字段,类似id序号,主键,类型为BIGINT(20)。这里指代的大部分表是指表内数据最少大于127行。

第二个问题是:有时在设计字段时,会有一个状态值字段,一般习惯使用int值来代替。说不定你感觉挺好,这里我要说说了,快点清醒!使用字符串并且要用形容词来描述。现在不缺这点消耗

3.使用标准工具mysqltuner看优化结果
wget http://mysqltuner.com/mysqltuner.pl

chmod +x mysqltuner.pl

# ./mysqltuner.pl

Enter your administrative username and password

Output you can see as follows

参考:
http://www.percona.com/mysql/5.0.67-b7/source/
http://www.mysqlperformanceblog.com/2008/12/03/mysql-50-51-and-innodb-plugin-cpu-efficiency/

Tags: MysqlDBA

Mysql优化经验关注点-innodb_thread_concurrency

十一月 9th, 2008 · No Comments

           在出现多核后,Mysql的这个参数发生了变化,就目前来说如果是2核的情况下,直接就设置为0.当然这里有高手说了,不要太教条,一定要测试,经验和数据是最最重要的。非常幸运,这个参数可以在线配置数量。如果是最化当然要看Show INNODB Status的参数变化(关于Show Status参数还需要经常复习,作为调优的基准使用)。

          另外,对于如果在线配置这个参数,经过查看也找到了:

mysql> set global innodb_thread_concurrency = 0;

=======华丽的分割线==================
       假设你有一个mysql数据库机器,现在你登陆后执行show Processlist,看到有很多sleep参数,

mysql> show processlist;
+—–+——-+—————–+——+———+——-+——-+——————+
| Id  | User  | Host            | db   | Command | Time  | State | Info             |
+—–+——-+—————–+——+———+——-+——-+——————+
| 644 | dbmgr | localhost:39943 | iwap | Sleep   |     7 |       | NULL             |
| 698 | root  | localhost:59783 | ibbs | Sleep   | 12260 |       | NULL             |
| 699 | dbmgr | localhost:59785 | iwap | Sleep   | 12256 |       | NULL             |
| 702 | root  | localhost       | NULL | Query   |     0 | NULL  | show processlist |

但日常查询又没有问题,是不是就不关心它了。注意,当你看到sleep时,你一定要注意,已经有非常重要的错误出现了,快点去干活吧。
        如果干,当然需要用工具,首先这里假设你使用的环境是Linux环境,
# netstat -ntp |grep :59785
tcp        0      0 127.0.0.1:3306              127.0.0.1:59785             ESTABLISHED 5339/mysqld
tcp        0      0 ::ffff:127.0.0.1:59785      ::ffff:127.0.0.1:3306       ESTABLISHED 15171/java

这个程序的pid,就可以trace了

# strace -p 15171
Process 15171 attached - interrupt to quit
futex(0xb7fdfbf8, FUTEX_WAIT, 15172, NULL

我靠,终于让我找到原因了。这里是java的syncronized在linux kernel在2.6.12之前有bug,所以如果想解决它,尽快更新kernel到最新版。教训啊,学习啊。希望大家能分享到这些。

参考:

1.Drilling down to the source of the problem
2.Debugging sleeping connections with MySQL

Tags: High Performance Tech · MysqlDBA

快速了解mysql数据库结构的方法-tips

十月 10th, 2008 · No Comments

这个方法其实不是什么秘密或者tricks。但相信还是会有人需要知道。

首先,由这里看到一个方法:mySQL workbench的使用

第一步:

mysqldump -d –no-add-drop-tables

然后在mySQL workbench菜单中
Clicked File->Import->Reverse Engineer MySQL Script
这样你会得到这个库的表结构信息。

第二步:

选择:

Model->Create Diagram from your Catalog Objects

oK,这回你可以看到效果了。

 MyCatch

Tags: MysqlDBA · Tips

Mysql在master-master replication环境下不要想着负载写数据

八月 6th, 2008 · No Comments

真是凑巧,今天晚上回来时还在琢磨是不是尝试一下在MM模式下,把写数据的操作分别负载到机器A和机器B上,想当然的认为这样不就可以提交CPU的处理能力了吗?没想到已经有专家提示,一句话:不可能实现!

原文

How to scale writes with master-master replication in MySQL

Tags: MysqlDBA

选择合适的IO Scheduler,获得更高性能Mysql环境

七月 20th, 2008 · No Comments

刚读一Mysql DBA写的文章受到提示,知道了Linux下的IO Scheduler的选择会在不同场景下,对Mysql有很大的提升。所以搞Mysql的读写的要注意这个小技巧,通过对不同Scheduler的读写测试,了解哪款Scheduler适合你。

注意Linux怎么着也要到2.6.x,有Raid卡,并且有最少4块硬盘的,要上到Raid10,注意是10。

Scheduler:
cfq
noop
deadline
anticipatory
原文中说noop性能更好,他正在作更多的尝试。这里场景不同,选择不同。但一个方法需要记住,那就是对于Scheduler要作尝试选择最优方案。

Tags: MysqlDBA