首先规范能够制定操作的标准,例如建表的时候该怎样,每张表必须要有主键,建库建表甚至设计字段的时候不允许在 SQL 当中添加字符集和排序规则的属性,默认实例的属性就可以。
其次规范可做量化的控制,有时要求一条 SQL 扫描的数量与返回的数量都不能太多,执行时间不能太长等等,从定性角度看问题都不大,但要落到实处,这样的要求是不够的,因此需要提供量化的指标。比如对慢 SQL,要求联机交易扫描的行数和结果集行数比不能超过 100:1。对于一个事务,更新的数量不能超过 10 万条。指标在开始设计时可能并不完美,但在使用的过程中不断研究、完善,就能够定出来更细化的指标。对于开发或是运维,都要对这些程序的设计和运行有一个底线的意识,一定不能越过这条线。
再是为了避开一些 Bug。一个例子是,大表的 Truncate 会导致数据库 hang 住,昨天农行的同事也有讲到,大家遇到的问题基本都是一样的。另外一个例子是 Replace into 的 Bug,会导致主备的元数据信息不一致,如果发生切换,新的主库插入数据的时候会出现主键冲突,这个问题相对比较大。为避免此类问题,规范上会要求不允许使用。