在Oracle数据库架构中,有段,范围和数据块。
但作为一名程序员,我什么时候才能知道这些事情呢?当我测试Oracle内存管理时,它们对我有什么用呢。
有没有办法查询这些内存单元?或者它主要是为了dba方面?感谢
答案 0 :(得分:2)
了解底层物理存储架构是一件好事,因为它可以让您设计和编写更高效的数据库应用程序;但这并非严格必要。
细分,范围和块是一个实现细节。
那就是说,你应该知道如何分析它们,你可以看到它们没有DBA权限,对初学者使用USER_SEGMENTS和USER_EXTENTS视图。
段可用于查看表/索引的低级存储。你应该知道你的桌子有多大。
以下是初学者用于了解数据库或表空间中对象的示例。
SQL> select segment_type, segment_name, bytes from user_segments
where segment_type in ('TABLE', 'INDEX') order by bytes desc
SEGMENT_TYPE SEGMENT_NAME BYTES
------------------ --------------------------------------------------------------------------------- ----------
TABLE BIG 209715200
TABLE FAKE 4194304
TABLE MD_TRIGGERS 262144
TABLE MD_DERIVATIVES 196608
INDEX IX_ZZ_NVL 196608
TABLE MD_PRIVILEGES 196608
INDEX MD_COLUMNS_PERF_IDX 131072
INDEX MD_DERIVATIVES_PERF_IDX1 131072
...
此查询的一个特定用途是研究表和索引的足迹之前和之后,以查看重建的有效性。例如,您可能会发现有数百个小表在大范围的表空间中,您可以使用较小的初始范围重建这些表,并使用段视图来查看它的工作情况。
我可以找到它们所在的表空间,并确定BIG可能是一个很好的表,可以从USERS表空间移出更大范围的表空间。
SQL> select segment_type, tablespace_name, segment_name, bytes from user_segments
where segment_type in ('TABLE', 'INDEX') order by bytes desc;
2
SEGMENT_TYPE TABLESPACE_NAME SEGMENT_NAME BYTES
------------------ ------------------------------ --------------------------------------------------------------------------------- ----------
TABLE USERS BIG 209715200
TABLE USERS FAKE 4194304
TABLE USERS MD_TRIGGERS 262144
TABLE USERS MD_DERIVATIVES 196608