记一次数据库的分析和优化建议

简介: 数据库的巡检是DBA工作中的一部分,有时候我们还是希望能够在巡检的基础上发现一些潜在的问题,把尽可能多的问题解决在初始阶段。 今天来给大家举一个数据库巡检和性能分析的例子。


数据库的巡检是DBA工作中的一部分,有时候我们还是希望能够在巡检的基础上发现一些潜在的问题,把尽可能多的问题解决在初始阶段。

今天来给大家举一个数据库巡检和性能分析的例子。

首先拿到一个数据库服务器,了解系统信息是必要的,同时还要分析数据库的信息,然后尽可能发现是否存在性能瓶颈,然后需要做一个对比的分析。


 系统信息

$ cat /etc/issue

Red Hat Enterprise Linux Server release 5.3(Tikanga)

Kernel \r on an \m

$ ksh cpuinfo.sh

**************************************

CPU Physical NO:  2

CPU Processor NO:  16

CPU Core NO:  cpu cores : 4

CPU model name : Intel(R) Xeon(R) CPU E5620@ 2.40GHz

************************************** 

top - 10:39:48 up 389 days,  2:28, 1 user,  load average: 0.91, 0.91,0.80

Tasks: 1370 total,   1 running, 1363 sleeping,   0 stopped,  6 zombie

Cpu(s): 1.2%us,  0.2%sy,  0.0%ni, 96.8%id,  1.6%wa, 0.0%hi,  0.2%si,  0.0%st

Mem: 65996212k total, 65820480k used,  175732k free,   530412k buffers

Swap: 16779884k total,      236k used, 16779648k free, 17410172kcached

Hugepage已经启用了。

[oracle@acc136 bdump]$  cat /proc/meminfo | grep -i page

AnonPages:     4783576 kB

PageTables:     359020 kB

HugePages_Total: 20525

HugePages_Free:     60

HugePages_Rsvd:     16

Hugepagesize:     2048 kB

数据库级信息

数据库是10gR2,2014年启动至今

内存组件的使用情况

Cache Sizes

~~~~~~~~~~~                       Begin        End

--------------------

BufferCache:    39,472M    39,472M Std Block Size:         8K

SharedPool Size:     1,440M    1,440M      Log Buffer:    14,256K

其它内存组件的大小

0?wx_fmt=png
Session信息的统计

0?wx_fmt=png

0?wx_fmt=png


锁和事务情况

[oracle@acc136 yangjr]$ ksh showlock.sh

Current Locks

-------------

There are also 0 transaction locks

Blocking Session Details

Redo日志切换频率

0?wx_fmt=png

表空间使用情况

常规检查,就不贴图了。

用户资源使用情况

查看数据库中用户资源的使用情况。常规检查就不贴图了。

近一周的数据库负载图表

0?wx_fmt=jpeg

针对两个不同时段的性能抖动进行分析。

第一个性能抖动最剧烈的时间段,是在88日凌晨

等待事件如下,可以看到主要的性能瓶颈在于IO

0?wx_fmt=png

CPU资源都消耗在sql部分。

0?wx_fmt=png

0?wx_fmt=png

Top sql如下:

 Elapsed      CPU                  Elap per  % Total

 Time (s)   Time (s)  Executions  Exec (s)  DB Time    SQL Id

---------- ---------- ---------------------- ------- -------------

    1,856         31      288,077        0.0   18.9 57j9uu7c9681a

Module: JDBC Thin Client

SELECT * FROM TEST_CN_BIND WHERE CN=:1 AND CN_TYPE IN(1,2,3) AND ENABLED='Y'ORDER BY

 CN_TYPE

    1,659         75        1,352        1.2   16.9 acbdxf552ud62

update TEST_USER_BILLING set LOGIN_STATUS = 1 where UIN = :1

    1,162        328            1     1162.1   11.8 b6usrg82hwsa3

Module: DBMS_SCHEDULER

call dbms_stats.gather_database_stats_job_proc ( )

      172,774       1,352         127.8    1.4   75.33   1659.42 acbdxf552ud62

update USER_BILLING set LOGIN_STATUS = 1 where UIN = :1

性能问题分析:

IO问题

Oracle的角度来看,IO瓶颈较高,针对目前的情况,没有更好的系统级改进建议

The throughput of the I/O subsystem wassignificantly lower than expected.

  RECOMMENDATION 1: Host Configuration, 13% benefit (1258 seconds)

     ACTION: Consider increasing the throughput of the I/O subsystem.

        Oracle's recommended solution is to stripe all data file using the

        SAME methodology. You might also need to increase the number of disks

        for better performance. Alternatively, consider using Oracle's

        Automatic Storage Management solution.

     RATIONALE: During the analysis period, the average data files' I/O

         throughput was 52 M persecond for reads and 2.1 M per second for

         writes. The average response time for single block reads was 5.9

        milliseconds. 

后台自动job运行

call dbms_stats.gather_database_stats_job_proc ( )

后台job运行时,会根据条件进行统计信息的收集。

Top sql来看,大表test_user_billing的查询acbdxf552ud62基于unique index scan,但是执行时间在1.4秒,主要的原因就是因为在执行期间同时在后台进行统计信息的收集。

0?wx_fmt=png

Oracle的建议可以看到其实做了一个全对象扫描,产生了大量的物理读。

ACTION: Run "Segment Advisor" onTABLE "ACC.USER_BILLING" with object id

        51864.

        RELEVANT OBJECT: database object with id 51864

     ACTION: Investigate application logic involving I/O on TABLE

        "xxxx.TEST_USER_BILLING" with object id 51864.

        RELEVANT OBJECT: database object with id 51864

     RATIONALE: The I/O usage statistics for the object are: 1 full object

         scans, 11827830 physicalreads, 459490 physical writes and 0 direct

        reads.

     RATIONALE: The SQL statement with SQL_ID "acbdxf552ud62" spent

        significant time waiting for User I/O on the hot object.

        RELEVANT OBJECT: SQL statement with SQL_ID acbdxf552ud62

        update TEST_USER_BILLING set LOGIN_STATUS = 1 where UIN = :1

     RATIONALE: The SQL statement with SQL_ID "92a49umxy7q8m" spent

        significant time waiting for UserI/O on the hot object.

        RELEVANT OBJECT: SQL statement with SQL_ID 92a49umxy7q8m

        select /*+ no_parallel(t) no_parallel_index(t) dbms_stats

        cursor_sharing_exact use_weak_name_resl dynamic_sampling(0)

        no_monitoring */ count(*),count("CARD_NO"),count(distinct

        "CARD_NO"),count("MAC_VAL"),count(distinct"MAC_VAL") from

        "ACC"."USER_BILLING" sample (  9.1540402221) t

第二个性能抖动时间点的分析

第二个时间点的分析可以排除后台job的运行影响,主要的瓶颈还是在于IO

0?wx_fmt=png

0?wx_fmt=png

性能问题分析:

         The throughput of the I/Osubsystem was significantly lower than expected.

 

  RECOMMENDATION 1: Host Configuration, 30% benefit (2038 seconds)

     ACTION: Consider increasing the throughput of the I/O subsystem.

        Oracle's recommended solution is to stripe all data file using the

        SAME methodology. You might also need to increase the number of disks

        for better performance. Alternatively, consider using Oracle's

        Automatic Storage Management solution.

     RATIONALE: During the analysis period, the average data files' I/O

         throughput was 1.8 M persecond for reads and 3.3 M per second for

         writes. The average response time for single block reads was 14

        milliseconds.

 

  SYMPTOMS THAT LED TO THE FINDING:

     SYMPTOM: Wait class "User I/O" was consuming significantdatabase time.

               (93% impact [6405 seconds])

改进建议:

开启异步IO

目前系统中aio配置存在,但是没有启用

$ cat /proc/sys/fs/aio-nr

65536

$ cat/proc/sys/fs/aio-max-nr

65536

$  /usr/bin/ldd $ORACLE_HOME/bin/oracle | greplibaio

       libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002af9f4ad8000)   


SQL> alter system setfilesystemio_options=setall scope=spfile;

后台Job的调度

需要进行确认是否可以重新选择一个低峰时间段来运行Job或者从后台禁用。按照时间频率进行统计信息的收集

SGA组件的调整

从内存组件的使用情况来看,shared pool的资源已经被buffer cache进行了压榨,可以适当调整一下shared pool的大小,比如设置为4G左右,目前仅为1G

内容根据情况看适度做了删减,可以看出来做一个数据库巡检的过程中其实还是需要花费不少的精力来分析问题,找到性能的瓶颈,这也是我们能够持续改进质量的基线。 



目录
相关文章
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
16 0
|
20天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
26天前
|
Cloud Native OLAP OLTP
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
124 4
|
1月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
25天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
95 0
|
20天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
8天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
9天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
34 3
|
21天前
|
缓存 监控 数据库
优化数据库查询性能的八大技巧
在今天的互联网时代,数据库是许多应用程序的核心组件之一。优化数据库查询性能是提升应用程序整体性能的关键。本文介绍了八种有效的技巧,帮助开发人员提高数据库查询性能,从而提升应用程序的响应速度和用户体验。

热门文章

最新文章