iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库的性能问题有哪些
  • 897
分享到

数据库的性能问题有哪些

2024-04-02 19:04:59 897人浏览 八月长安
摘要

本篇内容介绍了“数据库的性能问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 谓词越界常

本篇内容介绍了“数据库的性能问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

 数据库的性能问题有哪些

谓词越界常见发生在 where 谓词是时间字段的情况,总的来说统计信息记录的是一个过旧的时间,而 sql 传入的时间是一个最新的时间范围(往往是 <time time1<c<time2)由于统计信息不全,按照 CBO 计算出来的结果集就很小,在多表关联的情况下,CBO 就会选择认为的最优的关联方式,而实际执行时发现不是那么回事,有大量结果集需要扫描,就会爆发 SQL 性能问题。

谓词越界就是 select 的谓词的条件不在统计信息 low_value 和 high_value 之间,在实际选择结果集要大于 CBO  记录的结果集数量,即实际的 selectivity 偏大,这种情况下 CBO 评估出来的 selectivity 会出现严重的偏差,导致 CBO  选错执行计划。

测试验证

下面做一组测试,从执行计划 cost 看谓词越界的发生过程,先插入部分数据:

DECLARE i INT; BEGIN i := 78179; WHILE(i < 100000) LOOP i := i + 1; INSERT INTO test_obj(object_id) VALUES(i); COMMIT; END LOOP; END; /

查看此时的 num_rows:

TEST@PROD1> select count(*) from test_obj;   COUNT(*) ----------      94283 TEST@PROD1> select max(object_ID),dump(max(object_id),16) from test_obj;   MAX(OBJECT_ID) DUMP(MAX(OBJECT_ID),16) -------------- ----------------------------------------         100000 Typ=2 Len=2: c3,b     TEST@PROD1> select min(object_ID),dump(min(object_id),16) from test_obj;   MIN(OBJECT_ID   )               DUMP(MIN(OBJECT_ID),16) ------------------------------ ----------------------------------------       2                          Typ=2 Len=2: c1,3        --C103

不收集统计信息,此时统计列统计信息过旧,HIGH_VALUE 依然是原来的值 78179。

TEST@PROD1> select  low_value ,high_value,num_distinct,num_nulls from  DBA_TAB_COL_STATISTICS where table_name='TEST_OBJ' and owner='TEST';                                                                     Distinct     Number LOW_VALUE                      HIGH_VALUE                           Values      Nulls ------------------------------ ------------------------------ ------------ ---------- C103                           C3085250                             72,462(原值)  0

查询结果返回 2081 行结果集。

TEST@PROD1> select count(*) from test_obj where object_id between 78200 and 81000;   COUNT(*) ----------       2801 计算公式为: selectivity=((VAL2 - VAL1) / (HIGH_VALUE - LOW_VALUE)+2 / NUM_DISTINCT) * null_adjust null_adjust=(NUM_ROES - NUM_NULLS) / NUM_ROES  计算结果为: TEST@PROD1>  select round(((81000-78200)/(100000-2)+2/94283)*(94283-0)/94283*94283) from dual;    ROUND(((81000-78200)/(100000-2)+2/94283)*(94283-0)/94283*94283) ---------------------------------------------------------------                                                            2642

查看结果集发现 dictionary 值为 1,这明显是一个错误的执行计划,由于统计信息过旧,已经低于谓词条件区间(谓词过界)导致 CBO  低估了查询成本。

TEST@PROD1>  select count(*) from test_obj where object_id between 78200 and 81000;   Execution Plan ---------------------------------------------------------- Plan hash value: 2217143630   ------------------------------------------------------------------------------- | Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     | ------------------------------------------------------------------------------- |   0 | SELECT STATEMENT   |          |     1 |     5 |   289   (1)| 00:00:04 | |   1 |  SORT AGGREGATE    |          |     1 |     5 |            |          | |*  2 |   TABLE ACCESS FULL| TEST_OBJ |     1 |     5 |   289   (1)| 00:00:04 | -------------------------------------------------------------------------------   Predicate InfORMation (identified by operation id): ---------------------------------------------------      2 - filter("OBJECT_ID">=78200 AND "OBJECT_ID"<=81000)     Statistics ----------------------------------------------------------           1  recursive calls           0  db block gets        1117  consistent gets           0  physical reads           0  redo size         423  bytes sent via SQL*Net to client         419  bytes received via SQL*Net from client           2  SQL*Net roundtrips to/from client           0  sorts (memory)           0  sorts (disk)           1  rows processed

重新收集统计信息再次查看执行计划。

TEST@PROD1> exec dbms_stats.gather_table_stats('test','test_obj'); TEST@PROD1> select  low_value ,high_value,num_distinct,num_nulls from  DBA_TAB_COL_STATISTICS where table_name='TEST_OBJ' and owner='TEST';                                                 Distinct     Number LOW_VALUE            HIGH_VALUE                 Values      Nulls -------------------- -------------------- ------------ ---------- C103                 C30B                       94,283          0

此时统计信息 HIGH_VALUE 已经和最初计算的值相等,Typ=2 Len=2: c3,b。再次查看执行计划,此时 CBO  已经能够产生了正确的执行计划了。

执行计划为:

TEST@PROD1> select count(*) from test_obj where object_id between 78200 and 81000;   Execution Plan ---------------------------------------------------------- Plan hash value: 2217143630   ------------------------------------------------------------------------------- | Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     | ------------------------------------------------------------------------------- |   0 | SELECT STATEMENT   |          |     1 |     5 |   314   (1)| 00:00:04 | |   1 |  SORT AGGREGATE    |          |     1 |     5 |            |          | |*  2 |   TABLE ACCESS FULL| TEST_OBJ |  2642 | 13210 |   314   (1)| 00:00:04 | -------------------------------------------------------------------------------   Predicate Information (identified by operation id): ---------------------------------------------------      2 - filter("OBJECT_ID">=78200 AND "OBJECT_ID"<=81000)     Statistics ----------------------------------------------------------           0  recursive calls           0  db block gets        1117  consistent gets           0  physical reads           0  redo size         423  bytes sent via SQL*Net to client         419  bytes received via SQL*Net from client           2  SQL*Net roundtrips to/from client           0  sorts (memory)           0  sorts (disk)           1  rows processed

谓词越界主要发生在大表,按照 oracle 统计信息收集机制,表的数据变化量达到 10%  以上才会进行统计信息收集,大表不常收集统计信息就容易爆发谓词越界。

预防方式

可对关键表实行按谓词查询条件分区,即按天或者按月分区可规避此问题发生。

数据库的性能问题有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 数据库的性能问题有哪些

本文链接: https://www.lsjlt.com/news/61568.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库的性能问题有哪些
    本篇内容介绍了“数据库的性能问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 谓词越界常...
    99+
    2024-04-02
  • 优化你的数据库性能有哪些问题
    这篇文章将为大家详细讲解有关优化你的数据库性能有哪些问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  在优化你的数据库时,你可能没有用到这些细节的优点。...
    99+
    2024-04-02
  • 数据库中的冗余问题有哪些
    小编给大家分享一下数据库中的冗余问题有哪些,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!冗余意味着在数据库中具有相同数据的多个副本。当数据库很好地规范化时会出现此问题。假设学生详细信息属性表是...
    99+
    2024-04-02
  • 数据库自增主键可能产生的问题有哪些
    数据库自增主键可能产生的问题包括:1. 插入数据时可能存在并发问题。如果多个线程同时插入数据,可能会导致主键冲突,从而导致插入失败。...
    99+
    2023-09-27
    数据库
  • Sybase ASE数据库常见的问题有哪些
    这篇文章主要讲解了“Sybase ASE数据库常见的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Sybase ASE数据库常见的问题有哪些”吧!1 数据库占用磁盘空间的形式是什么...
    99+
    2023-06-10
  • redis常见的性能问题有哪些
    内存占用过高:当存储的数据量过大,内存占用过高可能会导致系统性能下降甚至宕机。 慢查询:当进行复杂查询或操作时,可能会出现慢...
    99+
    2024-03-02
    redis
  • 数据库主键相关问题有哪些
    这篇文章主要讲解了“数据库主键相关问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库主键相关问题有哪些”吧!1 是否每张表都应该有自增主键?不一定自增主键可以加快行的插入速度,对...
    99+
    2023-06-27
  • 数据库性能优化有哪些方案
    了解数据库性能优化有哪些方案?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!关系型数据库在互联网项目中应用极为广泛,今天小编...
    99+
    2024-04-02
  • redis性能常见问题有哪些
    了解redis性能常见问题有哪些?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!Master写内存快照,save命令调度rd...
    99+
    2024-04-02
  • 优化MySQL数据库性能的思路有哪些
    今天就跟大家聊聊有关优化MySQL数据库性能的思路有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。小编在这里介绍了提高MySQL 数据库性能的思...
    99+
    2024-04-02
  • Mysql数据库应用常见的问题有哪些
    这篇文章主要介绍“Mysql数据库应用常见的问题有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql数据库应用常见的问题有哪些”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • 数据库中常见的安全问题有哪些
    本篇内容主要讲解“数据库中常见的安全问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库中常见的安全问题有哪些”吧!1. SQL的错误诱导语句不正确的...
    99+
    2024-04-02
  • MySQL数据库的主从配置有哪些问题
    这篇文章主要介绍MySQL数据库的主从配置有哪些问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  MySQL数据库是一种功能性不是很强大的关系型数据库管理系统,尽管功能不完善,但...
    99+
    2024-04-02
  • 数据库查询性能需注意的有哪些
    这篇文章主要介绍“数据库查询性能需注意的有哪些”,在日常操作中,相信很多人在数据库查询性能需注意的有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”数据库查询性能需注意的有...
    99+
    2024-04-02
  • 若干数据库数据插入性能的区别有哪些
    这篇文章主要介绍“若干数据库数据插入性能的区别有哪些”,在日常操作中,相信很多人在若干数据库数据插入性能的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”若干数据库数...
    99+
    2024-04-02
  • mysql数据库的特性有哪些
    这篇文章主要讲解了“mysql数据库的特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库的特性有哪些”吧! ...
    99+
    2024-04-02
  • DB2数据库性能优化技巧有哪些
    今天就跟大家聊聊有关DB2数据库性能优化技巧有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  打开DB2数据库监视开关,获取需要的性能信息最简...
    99+
    2024-04-02
  • VS2019连接MySQL数据库的常见问题有哪些
    小编给大家分享一下VS2019连接MySQL数据库的常见问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!下午开始配置各种环境,想着VS2019可以配合My...
    99+
    2023-06-21
  • MySQL数据库有哪些特性
    本篇内容介绍了“MySQL数据库有哪些特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1.使用C和C...
    99+
    2024-04-02
  • 影响数据库系统性能的要素有哪些
    本篇文章给大家分享的是有关影响数据库系统性能的要素有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。影响数据库系统性能的要素有哪些?以下是亿...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作