Chinaunix

标题: MySQL版《每周一议》之吐槽DBA和开发人员的烦恼(积分已转账-2013-3-22) [打印本页]

作者: chinafenghao    时间: 2013-01-07 17:12
标题: MySQL版《每周一议》之吐槽DBA和开发人员的烦恼(积分已转账-2013-3-22)
积分已转账,请注意查收。

由于元旦放假原因,上周的MySQL版《一周一议》没有更新,本周继续更新。

现在隆重宣布上周获得《PHP和MySQL Web开发(原书第4版)》的用户是:seesea2517
另外xiaodylan获得200积分奖励。
其他参与讨论的用户到将至少获得20积分,积分是需要管理员手工加,加上后会发站内信的。


本期的话题是吐槽DBA和开发人员的烦恼。
这期的话题让我们一起来吐槽一下mysql DBA和数据库相关开发人员之间的故事。

1. 平时工作中遇到的问题

2. 工作上遇到的趣事

3. 一些和不同的部门之间的矛盾,沟通和解决

注:本期话题由seesea2517发起,seesea2517将会获得100积分的话题发起奖励。

活动奖励:
1、每周会评选一位最活跃的用户,有一本0racle相关的书籍送出,本周送出的书籍是《循序渐进Oracle数据库管理、规划和备份恢复》。
[attach]633713[/attach]
2、由于是话题讨论,所以每位参加者都能获得适当的积分奖励。最低20分,最高不限,^_^想要赚分的朋友也可以来凑热闹哟。
[attach]634171[/attach]

作者: seesea2517    时间: 2013-01-08 10:32
感谢版主,好期待带着书香的快递啊!
早上有点忙,看看下午有空整理一下话题内容~~
作者: devilkin0312    时间: 2013-01-08 11:31
这个话题有意思
作者: seesea2517    时间: 2013-01-08 15:04
这个话题我最喜欢了,哈哈。

1. 索引的故事
这有几个例子,当时遇到了我就看傻眼了:
- 联合索引 A-B 和 B-A 同时存在
- 联合索引 A-B 和 A、B 独立索引同时存在

2. 帐号表的故事
有一个新成立的项目,居然是为一个用户创建一个表,上线的时候我们去帮忙发现这个,当场吐血

3. 字段的故事
因为线上的数据很多了,要改表结构是个很费时的操作,咱可爱的开发为了减轻维护人员的工作,加了一个万能字段,text类型,啥字段也不用新增了,有需要记录的信息就由程序构造字符串加在一起记录在这个万能字段里。嗯,接下来你猜对了——查询用 like "%xxx%"。

4. 导数据的故事
不会写脚本看上去是很可怜的一件事,我总是《心太软》,看到一同学要将几百个压缩备份导入实验库做统计,手工弄了十几分钟,忍不住过去敲了不到十行的脚本……

5. 字符集的问题
导入库的数据咱用的好好的,开发同学一看就是乱码,这多不好,客户端不会设置……
平时我们这些开发在别人面前是“电脑高手”,我突然发现在弄数据库的时候,这个身份反过来了。哈哈。
作者: seesea2517    时间: 2013-01-08 15:06
好像大家都还没放假归来啊,今天有点冷清?
作者: vermouth    时间: 2013-01-08 16:04
记得才工作的时候,半夜把公司一台线上系统地 mysql 程序目录给 rm 了...
还好那台搭建不久,从 history 里找到具体的 wget 了,重新搞下来一个竟然解开直接用~~~
作者: huzi1986    时间: 2013-01-08 21:54
本帖最后由 huzi1986 于 2013-01-08 21:55 编辑

1、权限:开始没有DBA的时候,便于开发方便 ,运维给开发开的都是all privileges

2、安全: 允许root远程连接数据库

3、类型:常见使用char varchar 存储ip
              使用now 函数不错更新当前时间,不使用timestamp函数
              

4、引擎:没有多少经验的开发都认为MYISAM性能 比innodb要好,而且好很多倍

5、主键:很多表设计的时候没有主键
             使用char  varchar 来做innodb主键索引
              无用索引太多,有的表基本上每个列都有索引

6、表命名 数据库 字段命名: 表命名不规范,数据库命名使用 数字 字段使用保留关健字 ,比如 sort

7、分页:分页第一次居然  把全表数据要取出来


由于前期一些问题后期并不好调整,能调整的和开发说明 原有设计 存在的问题。能调整的基本上都愿意调整

比如难沟通的问题就是关于引擎选择方面 。开发喜欢 说 表能存多少数据,这有点让我哭笑不得。最近拿干脆给 开发做了一次基础培训,拿 出一些测试数据给研发看

我这里列出一些,大家说说自己所在环境中 数据库前期没有DBA参与设计存在的一些问题



作者: Hongqiyaodao    时间: 2013-01-09 00:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: DiDeCrouse    时间: 2013-01-09 09:08
回复 8# Hongqiyaodao


反正mysql被oracle收购了  
作者: Hongqiyaodao    时间: 2013-01-09 09:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: chinafenghao    时间: 2013-01-09 12:10
@DiDeCrouse
@Hongqiyaodao

一家人嘛,呵呵
作者: chinafenghao    时间: 2013-01-09 12:10
@seesea2517
是有点冷清,不知道是不是活动没啥吸引力,还是天雷冷,大家都不愿意打字了。
作者: xike2002    时间: 2013-01-09 12:35
这么好的活动必须得支持,大家一起加入进来讨论啊!
作者: xike2002    时间: 2013-01-09 12:43
下面谈一谈MYSQL基准测试,整理了一下以前的文档和资料如下

MySQL基准测试在数据库性能优化中是一个非常重要的分支。文中讨论了MySQL性能因素以及如何测试CPU性能,同时使用具体的例子来展示几种已被广泛接受测试MySQL系统的实践方法,希望对你有所启迪。
MySQL基准测试在数据库性能优化中是一个非常重要的分支。本文目的在于让读者对关系型数据库系统有一个基本的了解,掌握MySQL以及如何管理使用Linux。文中讨论了MySQL性能因素以及如何测试CPU性能,同时使用具体的例子来展示几种实用的测试MySQL系统的实践方法。

为什么数据库管理员要在MySQL系统上运行基准测试呢?答案显而易见,倘若在一个模拟的实时环境中系统设计能够承受住压力并且满足性能目标,那么数据库管理员也无需大费周章了。

在深入了解MySQL基准测试程序机制前,弄清楚什么是基准测试,这一点非常重要。简单来说,基准测试是“运行计算机程序或操作行为,通过运行一些标准测试和一系列的映衬来评估对象的相对性能。”

CPU基准测试主要用来测试硬件和运算能力,而软件基准测试更多的则是测试概念元素。

在我们的案例中,软件基准测试中数据库管理系统基准测试是一个很好的例子。这种类型的测试目的是衡量数据库管理系统的吞吐量和响应时间。最终的测试结果会以分数显示,而这些分数主要用来比较。

数据库管理员一般很难分清基准测试和压力测试之间的区别。这一点我们可以理解,因为这两种条件有着类似的目标,即数据库容量。两者明显的不同点在于:基准测试给出的结果,以数字呈现,能够允许你在每个基准测试和服务器/系统中调整设置,这是可以改变的,同时也能反应出数据库管理员是成功还是失败。而压力测试则是把系统推向极端边缘用以了解系统的极限有多大。

在MySQL服务器运行基准测试时,性能因素是数据库管理员必须考虑的问题。那么,有哪些性能因素?答案就是:吞吐量,延迟时间和可扩展性。将这三个因素结合在一起,代表了MySQL服务器的整体性能。

那么我们如何进行MySQL基准测试呢?为了获取正确的结果,请遵守以下一些规则:

应该多次检查输入的数据;
应该多次运行基准测试,至少5次;
重新启动MySQL服务器以消除任何不必要的缓存因素;
数据库管理员要有兴趣、认真对待进程。
下面有几个影响基准测试的例子,我们在任何时候都应当避免这种情况出现:

在一台单一的虚拟机上运行基准测试;
不可忽视不同网络基础设施的影响;
使用MySQL服务器默认设置;
无需根据服务器配置特定的和独特的业务需求;
无法消除缓存问题;
运行基准测试时,忽视任何不必要的缓存问题。
如何在MySQL上运行基准测试?

在构建MySQL网站时把现有的技术文档增加到MySQL基准测试中,这是一个非常实用的基准测试功能。MySQL开发团队称,BENCHMARK ()函数常被用来测试MySQL进程有多快?它适用于MySQL客户端。

详细功能显示如:BENCHMARK (count, expr): The BENCHMARK ()函数执行的表达式为expr重复计算次数。测试的结果值始终为0。基准测试最重要的数字出现在几秒钟时间内。如下图示例:



这里有一些技巧包括如何获得BENCHMARK () 函数正确结果。这几点如下:

建议多次执行该函数;
允许仅适用scalar表达;
表达式必须返回单个列或单个行;
该功能减少了由于网络或语法分析器而带来的干扰。
使用SysBench

MySQL的开发者建议使用一款流行的测试工具——SysBench(由MySQL开发者开发),这是一款多功能的工具允许数据库管理员测试CPU、文件IO以及MySQL性能。

下面我们就来看下利用SysBench对CPU、MySQL进行基准测试。

CPU性能

用于CPU性能基准测试命令显示如下:该命令将启动一个进程并且产出大量的数字。

sysbench --test=cpu --cpu-max-prime=20000 run

然而,最重要的数字是以总的时间(以秒为单位)为主。利用所花费的时间来计算所需要的被测试的计算参数。这一点很重要,你可以用来对比基准测试在横跨多个系统时最有价值的数据。

MySQL性能

SysBench可以用来测量MySQL性能。要想做到这一点,首先我们可以在数据库‘monitis’中创建1,000,000行数据测试表。通过以下命令执行:

sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis --mysql-user=root --mysql-password=yourrootsqlpassword prepare

接着在MySQL基准测试中输入:

sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis –mysql-user=root –mysql-password=yourrootsqlpassword –max-time=60 –oltp-read-only=on –max-requests=0 –num-threads=8 run

当基准测试结果显示后,查看交易列表。这个值是以每秒为交换单位。

为了确保所需要的基准测试在系统中能够很好的运行,这里只需要输入简单的命令:

sysbench -- monitis =oltp --mysql-db= monitis --mysql-user=root --mysql-password=yourrootsqlpassword cleanup

尽管可能会出现大量的MySQL性能基准测试类型,但上面的这些信息足够你使用了。

最后,MySQL性能测试针对不同的项目采用不同的解决方案。这是因为由不同的需求、时间,目标决定的。当然在MySQL系统上运行基准测试,就其技术本身而言在日常业务运作时也是非常必要的,希望这些实践对你有所帮助。


作者: seesea2517    时间: 2013-01-09 13:08
huzi1986 发表于 2013-01-08 21:54
1、权限:开始没有DBA的时候,便于开发方便 ,运维给开发开的都是all privileges

2、安全: 允许root远 ...

是啊,我们这里开发测试也都是所有权限,使用root。
用关键字命名还真是个大问题,我也有遇到,忘记写上去了,这个导致在 mysql4.0 dump 出来的文件在 mysql5 里无法使用,刚刚前两天发生的事情。
作者: seesea2517    时间: 2013-01-09 13:13
回复 14# xike2002


    这个……会不会是回错帖子了
作者: musezh2    时间: 2013-01-10 16:29
seesea2517 发表于 2013-01-08 15:04
这个话题我最喜欢了,哈哈。

1. 索引的故事


开服人员,对于第 “3. 字段的故事” 深有感触,很烦总是要变更字段,于是就采取这种方法,美其名曰 封装,透明。
哈哈,苦了db

作者: seesea2517    时间: 2013-01-10 17:03
回复 17# musezh2


    嘿嘿,你们的快乐是建立在DB的痛苦之上啊。
作者: musezh2    时间: 2013-01-10 18:23
xike2002 发表于 2013-01-09 12:43
下面谈一谈MYSQL基准测试,整理了一下以前的文档和资料如下

MySQL基准测试在数据库性能优化中是一个非常 ...


真好!
作者: zavakid    时间: 2013-01-11 02:06
回复 8# Hongqiyaodao

呵呵,不过有总比没有强啊
   
作者: Hongqiyaodao    时间: 2013-01-11 10:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: seesea2517    时间: 2013-01-11 13:56
回复 20# 关珥娟子


    这个,我点了一下举报,没什么大事发生吧。
作者: seesea2517    时间: 2013-01-11 13:58
回复 8# Hongqiyaodao


    不说还真没发现,感觉有点砸场子吧,哈。
作者: Hongqiyaodao    时间: 2013-01-11 15:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: seesea2517    时间: 2013-01-11 16:06
回复 25# Hongqiyaodao


    嗯,说不定获奖的同学从此改行了
作者: babyyellow    时间: 2013-01-11 18:13
俺们公司一个开发同事,特牛,告诉我他在做电信级开发的时候在,怎么怎么地。

mysql 整了个256字符的主键,

我当场就吐血了, 关键是死不认错。

我当时心想,你都开电信级应用,怎么舍得跑到咱这小公司来了,

有错不要紧,关键是态度,  不存在谁强势。


就为做好一件事情而已。


作者: zavakid    时间: 2013-01-11 21:27
回复 22# Hongqiyaodao

呵呵,多接触一些DB也未尝不可
   
作者: ajdan4q    时间: 2013-01-12 17:32
varchar(25)来存IP。。
作者: zavakid    时间: 2013-01-12 17:45
数据库要迁移,各种。。。
作者: tianlijian    时间: 2013-01-12 21:03
这个话题有意思

作者: chinafenghao    时间: 2013-01-14 09:20
@ajdan4q
用varchar存ip未必是坏事,因为ipv6暂时还木有函数可以转换。
作者: chinafenghao    时间: 2013-01-15 15:01
@seesea2517
术业有专攻嘛,你让DBA去做开发,写的代码一样被神吐槽。
作者: chinafenghao    时间: 2013-01-15 15:03
@huzi1986
最后一点很棒,要show case,让他们知道。
作者: sumuu    时间: 2013-01-15 23:53
本帖最后由 sumuu 于 2013-01-15 23:54 编辑

我也来说说二逼的事情吧~
记得当时才做开发的时候,做的是商城系统,当时在做测试的时候添加了很多产品做为测试数据,
当时对表结构一点都不熟悉,喜欢追求自增从1开始喜欢truncate table 命令,所以在产品上线
的时候吧产品表给清空,然后产品评论表忘记清空了,刚刚把系统放上去,才添加了几个产品,就发现产
品下面有评论,老板看到,还给我们大谈未来是怎么怎么的好~~现在想想。。
作者: seesea2517    时间: 2013-01-16 11:10
回复 34# sumuu


    这个只是操作上的遗漏啦,下回记得就没问题了。我们有做checklist的,感觉可以减少遗漏,方法可以参考哦。
作者: chinafenghao    时间: 2013-01-17 09:26
本帖最后由 chinafenghao 于 2013-01-17 09:26 编辑

@sumuu

哈哈,这个太二了,就不能看看评论时间么。
作者: yuyunliuhen    时间: 2013-03-08 22:13
这个不错,做开发的路过,常来看看
作者: pcghost_cu    时间: 2013-04-08 00:17
checklist这个方式挺好的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2