|
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
在数据库的领域里面,提供的工作岗位还是比较多的,但主要有两大类:一是数据库管理,另一个是数据库的开发。
我想,这两类工作性质,也就决定了人员在数据库领域里面的划分 及 侧重点。
数据库管理员,主要从事的应该是偏向技术方面的工作。
比如:数据库的日常运维、数据安全性(用户、权限等)、数据可用性(高可用) 以及 数据完整性(灾备等)。
数据库开发人员,主要从事的应该是偏向业务方面的工作。
比如:数据库模型的设计、对象间的参考关系、编写满足业务需要的SQL语句 等。
其中,编写满足业务需求的SQL语句,是开发人员的事情,最了解本条SQL语句的业务含义的也是开发人员。与DBA尤其是与
运维DBA没有太大的关系。
SQL的优化,我想主要应从两个层面着手处理:一是物理层面(如数据库的参数调整、表中数据的分布等),
另一个是逻辑层面(如调整表的设计、调整表的关联等)。这两个方面相互影响。缺少任何一方面的调整,
一条SQL语句都有可能达不到最佳的运行效率。
每一类数据库管理系统,都有一些区别于其它DBMS的特性。
作为开发人员,必须对DBMS的特性有充足的理解,才能在写SQL语句时,充分的运用好数据库的功能。
发挥出数据库的优势。不了解DB2的分区键、Teradata的PI,就很难将表设计好,也就很难写出高效的
SQL语句。
2、在你工作中遇到什么样恶心的sql,吐槽下?
起初,我们在生产上遇到一些问题SQL语句时,还会打个电话通知一下开发人员,让他们自已去看一下,然后,
根据实际的业务需求,对SQL语句进行适当的调整。但收效较差,基本不改。
现在,我们直接在生产环境上利用WORKLOAD管理,根据实际的情况,设计了6大类的指标,只要SQL语句触发这些
指标中的任何一个,就会被KILL掉,让这些问题SQL语句始终得不到想要的结果。这样做了以后,那些问题SQL
基本都改完了,而且,80%以上,都是开发人员自己改完的。
开发人员的人数是DBA的50倍都不止吧,何必把这些问题SQL语句都揽在DBA的怀里呢。关键是,揽在怀里,有可能
你也解决不了实际的问题。
3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
这个层次可能并不是单一的,需要根据数据库的运行负载的实际情况来定。
有些SQL语句可能占用过多的CPU,比如笛卡尔积,多数是由于开发人员写少了条件 或 参与关联的表中数据重复导致。
有些SQL语句可能占用过多的临时空间(spool空间等),比如全表扫描、排序、分组。
有些SQL语句可能造成严重的偏斜(CPU、IO等),比如所处理的全部数据都集中在某一个分区(AMP)或几个分区(AMP)上。
有些SQL语句可能使用了过多无用的函数转换 等。
其实层次,也就是这些资源的占用指标,可依据生产的实际情况而定。
4、大家有没有为了sql跟开发急眼的时候,分享下。
大多不需要急眼。
在开发人员写这条SQL语句时,可能当时确实没有性能问题,系统刚上线,需要处理的数据量也不大,性能问题也没有突显出来。
当系统正常运行了几年后,业务发展较快,数据量也急增。这个时候,可能性能问题也就突显出来了。
慢慢调整,好好沟通,问题都是可以解决的。
-------------------------------
上述仅个人观点,供参考。 |
|