【性能调优】快速获得表中记录件数

2023-11-30 06:40

本文主要是介绍【性能调优】快速获得表中记录件数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


在论坛上与一位朋友讨论如何获得表中记录件数时,从maclean老师那里得到提示,发现可以从user_tables或dba_tables表中快速获得表中记录件数。

帖子地址:http://www.itpub.net/forum.php?mod=viewthread&tid=1508469&page=1&extra=#pid18502245

那位朋友的问题贴:
----------------------------------
数据库中有个表每天都有更新删除,追加的操作,如何能查询出这个表每天总共有多少条记录??


大家多帮忙啊
----------------------------------

我的问题确认
----------------------------------
似乎楼主只是想确认一下是否因为数据量增加而导致plsql变慢了。
如果只是想统计一下表中数据记录的件数,来确认一下是否有数据增加,用于问题调查的话,似乎并不麻烦,简单的select count(1) from 表名 即可。  
不知是不是我理解错了楼主问这个问题的本意……
----------------------------------

那位朋友的回帖
----------------------------------
楼上理解的没错,关键问题是我只是知道当前的记录数,过去每天的就无法获得了
----------------------------------

针对上面那位朋友提到的记录保留的问题,我的回帖
----------------------------------
xiaoma0401 发表于 2011-11-5 20:41 
楼上理解的没错,关键问题是我只是知道当前的记录数,过去每天的就无法获得了


其实进行问题调查的话,观察几天或连续一定间隔地观察几次大体就可以判明问题了,
一般次数不会需要太多,所以可以写一组select count(1) from tblname 脚本,然后每次把执行结果保留下来,几次对比即可。(如黏贴到excel中观察)

如果感觉不好对比,也可以专门建一个表,包含表名、记录件数、操作日期 几个字段就可以了,
每次使用insert  into 。。。select  语法,类似如下将检索记录插入到表中即可。
insert into cntTbl (表名,记录件数,操作日期)
select ‘dept’  as name,
          count(1) as cnt,
          to_char(sysdate,'YYYY-MM-DD')  as opdate
from dept
gruop by name,cnt,opdate;
commit;


以上,供参考,希望能有帮助

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

maclean老师的回帖,回帖中提到了利用oracle统计信息来获取表中记录件数的思想。
-----------------------------------
xiaoma0401 发表于 2011-11-5 20:41 
楼上理解的没错,关键问题是我只是知道当前的记录数,过去每天的就无法获得了

The old statistics are purged automatically at regular intervals based on the statistics history retention setting and the time of the recent analysis of the system. Retention is configurable using the ALTER_STATS_HISTORY_RETENTION procedure of DBMS_STATS. The default value is 31 days, which means that you would be able to restore the optimizer statistics to any time in last 31 days.

历史统计信息 一般会保留31天。 这些信息包括表的num_rows

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

这里先对maclean老师提到的DBMS_STATS.ALTER_STATS_HISTORY_RETENTION 这个存储过程简单介绍一下,资料中的,直接拷贝过来。
---------------

ALTER_STATS_HISTORY_RETENTION

Enable or disable autopurging of statistic histories

dbms_stats.alter_stats_history_retention(retention IN NUMBER);

NULL = change to default value
   0 = never save old stats, autopurge statistics history
   1 = statistics history never purged by autopurge 

exec dbms_stats.alter_stats_history_retention(0);

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

下面是我根据maclean老师的提示,做的一个简单的实验。
但是像我在下面“TO楼主”部分提到的,由于user_tables、dba_tables的信息来源于Oracle自动收集的统计信息,而这个信息有时肯那个并非最新的,所以,user_tables、dba_tables的信息一般仅供参考。
如果想使用这两个user_tables、dba_tables来得到准确信息,需要在查询user_tables、dba_tables之前,
对需要查询的表手动执行以下表分析。
analyze table table_name compute statsticstic ;

--------------------------------------------------
本帖最后由 chicheng_cn421 于 2011-11-6 07:43 编辑
maclean 发表于 2011-11-6 00:36 
The old statistics are purged automatically at regular intervals based on the statistics history r ...

跟 maclean 老师又学到新东西,谢谢!

可以利用Oracle自己的统计信息,来得到表中记录的行数。简单做了个实验。
-----------------------------------------------
■在当前用户下查询 user_tables  
SQL> conn scott/tiger
已连接。
SQL>  select table_name,tablespace_name, num_rows,table_lock from user_tables where table_name in ('DEPT','EMP');

TABLE_NAME                     TABLESPACE_NAME                  NUM_ROWS TABLE_LO
------------------------------ ------------------------------ ---------- --------
DEPT                           USERS                                   4 ENABLED
EMP                            USERS                                  14 ENABLED

已选择2行。

SQL> select count(1) from dept;

  COUNT(1)
----------
         4

已选择 1 行。

SQL> select count(1) from emp;

  COUNT(1)
----------
        14

已选择 1 行。

■再换到dba_tables  下查询试试,发现信息一样,而且如果需要查询多个用户下的表的话,使用 dba_tables 更加方便。 
SQL> conn / as sysdba
已连接。
SQL>  select owner,table_name,tablespace_name, num_rows,table_lock from dba_tables where table_name in ('DEPT','EMP');

OWNER                          TABLE_NAME                     TABLESPACE_NAME                  NUM_ROWS TABLE_LO
------------------------------ ------------------------------ ------------------------------ ---------- --------
SCOTT                          DEPT                           USERS                                   4 ENABLED
SCOTT                          EMP                            USERS                                  14 ENABLED

已选择2行。

SQL>

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

TO楼主
Oracle的统计信息是定期启动相关Job来自动收集的,
但是,偶有情况,统计信息收集不是很及时,导致我们看到的统计信息不是最新的,
所以这种方法可参考价值很大,但如果 个别表记录件数与想定件数差异较大,建议再利用select count(1) from 表名  的方式再自己手动验证一下。


或着像下面这样先对相关表重新进行表分析,重新收集统计信息后,再查询user_tables或dba_tables。
analyze table table_name compute statsticstic ;
---------------------------------------------------

以上。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20335819/viewspace-710313/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20335819/viewspace-710313/

这篇关于【性能调优】快速获得表中记录件数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/436010

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、