DBA SQL Review

Schema  REview的注意事项

SQL review的注意事项

线上Schema 分析优化技巧

DBA Review 工作内容

表字段、索引设计优化

字段类型(针对业务、故障等类型去确定字段)

注释标准度

分区表约束

SQL编写规范

DML编写规范

子查询约束

函数使用

优化的目的:

为开发人员提出更高的建议

Schema  REview的注意事项

Schema  REview的目标

功能实现为主

保证节省资源

平衡业务技术各个方面,做好取舍

让数据库干自身擅长的工作

不在在DB里进行操作

减少复杂操作

字段数量

建议不超过20-50个

做好数据评估

建议纯int不超过1000万,含有char的不要超过800万

非核心表另议

可以考虑反范式设计

适合的冗余设计,减少join

核心表尽可能精简

日志表可进行水平分表

注意引擎区别 Innodb & Tokudb

Tokudb  减少update操作  (更新数据 表会变得很大)

字段设计

主键 innodb表是以主键排序存储IOT尽量使用短,自增的列做索引,复制结构中row

格式中,如果表有主键可以加速复制。

INT 无符号自增列  可以考虑BIG int

可用uuid_short()代替uuid 转成bigint 存储

注意潜在风险

tinyint 做大表主键可能导致mysql  crashed

类型转型导致查询效率很低

mysql在开发上面的特点

(1)每个query 只能用到一个core(处理层)

(2)没有执行的缓存

(3)mysql默认情况下,随着连接数的增加。性能会下降   (基于连接数的压力测试)

(4)校验式嵌套处理  没有hashjoin

在主从复制结构中从库对主键的选择

(1)会选择主键

(2)会选择有效的索引

(3)全表扫描

针对高速写入的环境的主键设计

字符集问题

Emoji表情 表示用utf8mb4

将字符转数字存储

利用int 存储ip 而非char(15)

INET_ATON() &INET_NTOA()

将日期转换成数字

from_unixtime()

unix_timestamp()

null与 not null有什么坑?

C1 vchar(16)default null    不建议

C1 vchar(16)default not  null   不建议

C1 vchar(16)default not null default ‘‘  建议

schema  Review

工具:

利用pt-mysql-summar 指定DB分析

利用pt-duplicate-key-checker 指定DB 查看重复索引、重复主键 官方手册

功能环境记录全量慢日志用于分析

SQL Review注意事项

SQL Review 总则

避免线上系统出现大操作

全面使用索引

优化join

去除无意义逻辑

注重查看where条件

除了select 语句,没有where条件的可以直接去掉

where条件字段 区别度高字段,注意建索引

like不要出现以%开头的查询

对于出现子查询的sql,要确定上线的mysql版本,利用explain确认

避免使用sslect *,fa方便调整字段列表,还可以减少不必要的I/O

insert 要对字段写入

整个SQL要用explain确认

去除无意义的操作

很多SQL是生成的。如ibatis,Hibernate 生成的类的SQL

其他框架生成的SQL

复杂类的SQL中无意义逻辑去除

不必要的括号也可以去除

优化join

控制最多三层join建议2个以下

小表驱动大表

字典 常用表 其他表排序

控制join后面where条件选择的的行数,尽量在1000行以下

使用union all 代替union

减少临时表出现

避免线上大的操作

分批多次操作

大事务拆分成多个事务区分间操作

频繁的查询考虑适当的缓存

对于text,blob字段。适当进行拆分

时间: 2024-08-04 13:35:50

DBA SQL Review的相关文章

The Accidental DBA:SQL Server Backup

最近重新翻看The Accidental DBA,将SQL Server Backup部分稍作整理,方便以后查阅.一.Understanding RTO and RPO1.1.RTO(Recovery Time Objective),停机时间,how much downtime is acceptable --downtime per year(24*365,5-nines means 99.999% up-time) select 60*24*365*(1-0.99999) --5.25600

oracle EBS dba SQL scripts

-查看EBS用户的所有职责: SELECT frt.responsibility_name, furg.END_DATE  FROM fnd_user_resp_groups  furg,       fnd_responsibility    fr,       fnd_responsibility_tl frt,       fnd_user              fu where fu.user_name = '&username'   and fu.user_id=furg.user

The Accidental DBA:Troubleshooting

最近重新翻看The Accidental DBA,将Troubleshooting部分稍作整理,方便以后查阅.此篇是Part 3Part 1:The Accidental DBA:SQL Server BackupPart 2:The Accidental DBA:Troubleshooting Performance一.Wait Statistics Analysis当SQL Server执行一项任务,如果它需要等待(页面释放锁.从磁盘读取页面到内存.事务日志写入),SQL Server会记录

latch: shared pool latch: library cache 诊断脚本(latchprofx.sql,latchprof.sql)

执行方式如下: @d:\latchprofx.sql  sid,name,laddr % cache 10000 @d:\latchprof.sql  sid,name,laddr % cache 10000 脚本出处:http://www.tanelpoder.com latchprofx.sql -------------------------------------------------------------------------------- -- -- File name: l

2014年10月30日-----SQL的基础知识

数据库的概念 结构化查询语言:structured query language 简称:SQL 数据库管理系统:database management system 简称:DBMS 数据库管理员:database  administration 简称:DBA SQL的语言类别 DDL 数据定义语言   create(创建)  drop (删除) alter(修改) DML  数据操作语言    CRUD(增删改查) DCL   数据控制语言   grant  back SQL server200

收集oracle统计信息

优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分布:             --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM:索引统计:--叶块数量,等级,聚簇因子:             --DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL:

记一次cognos的启动错误

今日在技术群看到有个人因为cognos启动错误求助: 具体错误信息如下: ====================================================================================================== Launching a JVM using 'Maximum memory in MB']Successfully launched a test JVM with the memory setting of '768'

为什么你的MySQL跑得很慢?

其实这是一个老问题了: 为什么会觉得数据库比较慢呢? 再换种问法: 数据库优化要从哪些方面入手? 1第一点,硬件太老 硬件我们这里主要从CPU.内存.磁盘三个方面来说下,还有一些因素比如网卡,机房网络等因为文章篇幅关系,就不一一介绍了,以后还有机会可以聊. 首先我们来看下MySQL对CPU的利用特点: 5.1可以利用4个核,5.5可以利用到24个核,5.6可以利用到64个核 比如MySQL5.6能用到48个CORE以上,跑得好的,64个CORE都能用到(48CORE-64CORE之间,官方公布4

mysql-proxy 简介

# 背景 今天同事分享的主题就是mysql-proxy,于是下来自己了解下,不求精通,只求知道这个玩意 # 简介 mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server. 它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上. mysql-proxy最基本的用法,就是作为一个请求拦截,请求中转的中间层: . 进一步的,mysql-proxy可以