Oracle 高低水位线的学习
Oracle 高低水位线的学习
背景
最近产品的一些脚本会大量的给一些流程表里面插入数据
因为只是一个流程相关没有时序查询的需求
所以数据量挺大, 但是按照石时间戳删除非常麻烦.
自己执行过多次delete 但是使用自己的SQL查询表大小,发现总是失败
想起来可能跟高低水位线有关系, 所以这里学习了解一下.
我理解水位线不进行处理, 在进行全表扫描时 ,会多扫描很多无效的区块
对性能是一个伤害, 所以应该努力降低一下相应的水位线.
Oracle为了性能 并不会将所有的表放到一个特定的增长位置
所以就会出现, 数据库数据文件增长上去之后没有办法再缩小回来.
SQLSERVER 没有这样的问题, 但是性能会差一下
为了解决这样的问题 exp/expdp 的备份恢复方式其实是会修改高低水位线的
再不是非常大的 并且有停机时间的环境下面执行一下备份恢复 重建表的查询统计信息对性能其实很有帮助.
查询情况
| 表空间名称 | 表空间大小(M) | 表空间剩余大小(M) | 表空间使用大小(M) | 表空间大小(G) | 表空间剩余大小(G) | 表空间使用大小(G) | 使用率 % |
|---|---|---|---|---|---|---|---|
| SYSTEM | 920 | 105.625 | 814.375 | 0.8984375 | 0.1031494140625 | 0.7952880859375 | 88.52 |
| xxxxORA | 1925120 | 545808.5625 | 1379311.4375 | 1880 | 533.01617431640625 | 1346.98382568359375 | 71.65 |
| UNDOTBS2 | 32024 | 31099.9375 | 924.0625 | 31.2734375 | 30.37103271484375 | 0.90240478515625 | 2.89 |
| SYSAUX | 7525 | 423.3125 | 7101.6875 | 7.3486328125 | 0.41339111328125 | 6.93524169921875 | 94.37 |
| USERS | 5 | 4 | 1 | 0.0048828125 | 0.00390625 | 0.0009765625 | 20 |
使用的SQL
SELECT
a.tablespace_name "表空间名称",
total / ( 1024 * 1024 ) "表空间大小(M)",
free / ( 1024 * 1024 ) "表空间剩余大小(M)",
( total - free ) / ( 1024 * 1024 ) "表空间使用大小(M)",
total / ( 1024 * 1024 * 1024 ) "表空间大小(G)",
free / ( 1024 * 1024 * 1024 ) "表空间剩余大小(G)",
( total - free ) / ( 1024 * 1024 * 1024 ) "表空间使用大小(G)",
round( ( total - free ) / total, 4 ) * 100 "使用率 %"
FROM
( SELECT tablespace_name, SUM( bytes ) free FROM dba_free_space GROUP BY tablespace_name ) a,
( SELECT tablespace_name, SUM( bytes ) total FROM dba_data_files GROUP BY tablespace_name ) b
WHERE
a.tablespace_name = b.tablespace_name
修改表的水位线-尝试1
alter table table1_name enable row movement;
alter table table1_name shrink space ;
发现这个SQL根本无效
修改表的水位线-尝试2
truncate 表可以直接降低水位线
所以想法是 先按照时间戳字段删除大部分数据
然后create tableback as select * from tablesource 建立备份表
然后truncate table tablesource 的方式处理表
然后 insert into tablesource select * from tableback
发现这样处理之后 数据库 查询出来的表大小就会发生变化了.
部分表信息
| TABLE_NAMEINFO | TABLE_ROWNUM | TABLE_COLNUM | TABLE_SIZE |
|---|---|---|---|
| table1_name | 2097322 | 569 | 76672.875 |
| table2_name | 62184 | 216 | 27706.5 |
复制表之后
| TABLE_NAMEINFO | TABLE_ROWNUM | TABLE_COLNUM | TABLE_SIZE |
|---|---|---|---|
| table1_name_BACK | 744443 | 68 | 6696.6875 |
修改一下表大小获取的SQL
SELECT
x.table_name AS table_nameinfo,
x.表行数 AS table_rownum,
x.表列数 AS table_colnum,
y.表大小 AS table_size ,
x.table_tablespace as table_tablespace
FROM
(
SELECT
b.table_name,
a.num_rows AS 表行数,
b.count1 AS 表列数 ,
a.TABLESPACE_name as table_tablespace
FROM
user_tables a
INNER JOIN ( SELECT table_name, count( column_name ) AS count1 FROM user_tab_columns GROUP BY table_name ) b ON a.table_name = b.table_name
ORDER BY
b.table_name
) x LEFT outer
JOIN (
SELECT
sum( tablesize ) AS 表大小,
tablename
FROM
(
SELECT
sum( C.bytes ) / 1024 / 1024 AS tablesize,
C.table_name AS tablename
FROM
( SELECT A.table_name, B.bytes FROM USER_lobs A, USER_extents B WHERE A.segment_name = B.segment_name ) C
GROUP BY
C.table_name UNION ALL
SELECT
sum( bytes ) / 1024 / 1024 AS tablesize,
segment_name AS tablename
FROM
user_extents
WHERE
segment_type = 'TABLE'
GROUP BY
segment_name
)
GROUP BY
tablename
ORDER BY
1 DESC
) y ON x.table_name = y.tablename
ORDER BY
nvl(y.表大小,0) desc FETCH NEXT 100 ROWS ONLY
Oracle 高低水位线的学习的更多相关文章
- Oracle 执行报错表空间或临时表空间不足,降低水位线方法
Oracle 执行语句插入临时表报表空间不足,在增加表空间到最大后依然报错,经分析应该为创建的临时表水位线未清除导致,查询降低水位线方法如下: 原文地址:http://blog.itpub.net/2 ...
- Oracle的高水位线
一.什么是水位线 所有的oracle段都会有一个在段内容纳数据的上线,把这个上限成为“high water mark”,这是一个标记,用来说明已经有多少没有使用的数据块分配给这个段,原则上high w ...
- Flink Pre-defined Timestamp Extractors / Watermark Emitters(预定义的时间戳提取/水位线发射器)
https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/event_timestamp_extractors.html 根据官网 ...
- Oracle OCI操作UDT相关学习(二)
沿用 Oracle OCI操作UDT相关学习 一文中定义的类型和表. 1.更改数据 在sqldeveloper 中更新数据, update dxl.cust set addr.street='a11' ...
- Oracle OCI操作UDT相关学习
1.Oracle数据类型 Oracle的数据类型如下 字符串类型 char nchar varchar2 nvarchar2 数值类型 int number integer smallint 日期类型 ...
- Oracle Database 11g Express Edition学习笔记
修改字符集 使用用户system,通过sqlplus程序连接到Oracle数据库,输入以下命令,查看字符集: SQL> select userenv('language') from dual; ...
- 初级Oracle和SQL学习者的学习笔记。韩顺平-玩转oracle。
我自己就是一个oracle和sql的初学者,前段时间看了韩顺平老师的oracle视频教程,觉得很深入浅出,收获了很多.同时自己也做了不少笔记,现在想将纸质笔记以自己的话总结出来.俗话说得好:教学总是相 ...
- ORACLE PL/SQL异常处理(Exception)学习笔记
1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...
- Oracle从入门到精通----学习笔记
书名:<Oracle从入门到精通:视频实战版>秦靖.刘存勇等编著 第4章 SQL基础 1.SQL语言分类 数据定义语言 --- DDL,Data Definition Language 数 ...
- Oracle的 EXEC SQL CONTEXT学习
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页 回到顶级页面:PostgreSQL索引页 [作者 高健@博客园 luckyjackgao@gmail. ...
随机推荐
- Windows Server 2012 R2在桌面上显示我的电脑等图标
从Windows 2012 开始,微软取消了服务器桌面个性化选项,如何重新调出配置界面,可以使用微软命令.方法如下: 按下「Win鍵」+「R」,在运行里输入: rundll32.exe shell3 ...
- 9.mysql的数据迁移到es中
背景 从开发的角度说,就是老板叫我用es了,没那么多为什么,爸爸说了算 从业务角度,mysql已经不能满足我对全文检索的需求了.我需要检索某一个字段包含"圣诞节刚刚过去"这一字符串 ...
- java:JDBC使用步骤(mysql)java小白的第一篇博客
1:环境要求 先在你的mysql里面创造一个数据库(并添加一点数据) 下载并导入驱动 2:jdbc的五大步骤 第一步:加载mysql驱动: 1 Class.forName("com.mysq ...
- Flume快速入门
Flume快速入门 一.简介 高可用.高可靠,分布式的海量日志采集.聚合和传输系统,基于流式架构,灵活简单. event:事件 source:数据源 sink:目标 channel:数据管道 通过获取 ...
- 日常Bug排查-集群逐步失去响应
前言 日常Bug排查系列都是一些简单Bug排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_ Bug现场 最近碰到一个产线问题,表现为某个应用集群所有的节点全部下线了.导致上游调用全部 ...
- 先收藏!关于Java类、接口、枚举的知识点大汇总
摘要:Java知识点精选之类.接口.枚举30问,算是比较基础的,希望大家一起学习进步. 整理了一些JAVA语言的在类.接口.枚举等方面的知识点以及大家常遇到的问题.希望能帮助到大家. Q: 各修饰符所 ...
- MemArts :高效解决存算分离架构中数据访问的组件
摘要:计算侧需要一个高速的缓存层来消除计算集群和OBS之间的数据访问鸿沟.为了解决这个问题,提出MemArts CC分布式客户端缓存. 本文分享自华为云社区<华为云全新缓存生态组件MemArts ...
- 聊聊Java的异常机制问题
摘要:java异常指在程序运行时可能出现的一些错误,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流. 本文分享自华为云社区<Ja ...
- 详解CNN实现中文文本分类过程
摘要:本文主要讲解CNN实现中文文本分类的过程,并与贝叶斯.决策树.逻辑回归.随机森林.KNN.SVM等分类算法进行对比. 本文分享自华为云社区<[Python人工智能] 二十一.Word2Ve ...
- 火山引擎 DataTester 推出可视化数据集成方案
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数字化的长期演进,企业中往往存在多个运行在不同平台的数字系统,这些数据源彼此独立,数据跨系统间的交流.共享和融 ...