数据库性能优化漫谈(未完,整理中)

1 前言

  在生产环境中,经常出现数据库使用者抱怨应用响应缓慢,数据库操作卡顿且SQL执行时间过长的问题。性能优化是一个庞大的体系,涵盖了硬件、网络、操作系统、数据库以及应用程序的多个方面。鉴于我的有限经验,我分享一些数据库性能优化的思路,但可能存在一些错误和不足之处,欢迎多加指教。

2 性能优化几个维度

  • 硬件
    服务器、SAN交换机、存储、网络交换机等。
    SinoDB数据库硬件优化建议

  • 操作系统
    CPU、内存、磁盘IO、系统参数等

  • 数据库
    表、索引、dbspace、表分区设计;
    数据库资源消耗情况;
    Lock checkpoint 参数设置;
    onconfig 配置参数;
    数据库等待事件;
    隔离级别;
    统计信息过久;
    执行计划选择错误;
    数据库bug;

  • 应用及SQL
    业务逻辑sql改写
    top sql 优化;

3 定位问题常用工具和方法

  • 操作系统工具
    top sar vmstat iostat netstat nmon mpstat dd iftop
    查看操作系统在异常时段,CPU 使用率、负载、内存大小、磁盘IO情况、网络流量情况。
    cpu 使用率,
    是否存在大量硬解析,是否大量连接数执行sql,PDQ并行的使用。
    存储磁盘IO
    raid 配置,操作系统、数据库异步IO方面配置等。
    内存:
    数据库所占总内存比例。
    V段内存的增长情况。

    网络:
    连接数数量,连接时长、网卡聚合方式、网卡带宽、交换机错误率、丢包率等。

  • 数据库系统工具
    onstat ,系统表,查看执行计划工具等。

  查看的内容:
  查看锁等待数量、死锁;
  锁使用最多的表;
  查看数据热块;
  索引、分区表的使用;
  统计信息更新;
  多次全表扫描的表;
  物理日志空间大小和个数;
  逻辑日志大小和个数;
  临时表空间大小和个数;
  数据库等待事件;

  • 应用开发
    应用程序的业务逻辑和实现逻辑。
    应用程序的调度JOB频率和时间点。
    表、索引、分片分区设计。
    备份任务策略和启动时间点