ホームページ データベース mysql チュートリアル Oracle数据库中段管理方式的详细介绍

Oracle数据库中段管理方式的详细介绍

Jun 07, 2016 pm 04:53 PM
oracle データ

用Oracle数据库10g通过回收浪费的空间、联机重组表格和评估增长的趋势,有效地在段中进行存储管理。近来,有人要求我评估一个与

用Oracle数据库10g通过回收浪费的空间、联机重组表格和评估增长的趋势,有效地在段中进行存储管理。近来,有人要求我评估一个与 Oracle 数据库竞争的RDBMS。在供应商的演示过程中,观众认为“最棒”的特性是,对联机重组的支持——该产品可以联机重新部署数据块,以使段的等价物更简洁,并且不会影响当前的用户。

那时,Oracle还没有在Oracle 9i数据库中提供这种功能。但是现在,有了Oracle数据库10g,就可以轻松地联机回收浪费的空间和压缩对象——正好适合于起步者。

不过,在检验该特性之前,让我们看一看处理这项任务的“传统的”方法。

当前惯例

考虑让我们看一个段,如一张表,其中填满了块,如图1 所示。在正常操作过程中,,删除了一些行,如图2 所示。现有就有了许多浪费的空间:(i)在表的上一个末端和现有的块之间,以及(ii)在块内部,其中还有一些没有删除的行。

 
图 1:分配给该表的块。用灰色正方形表示行

Oracle不会释放空间以供其他对象使用,有一条简单的理由:由于空间是为新插入的行保留的,并且要适应现有行的增长。被占用的最高空间称为最高使用标记(HWM),如图2所示:

Oracle数据库中段管理方式的详细介绍

 
图 2:行后面的块已经删除了;HWM 仍保持不变

但是,这种方法有两个主要的问题:

当用户发出一个全表扫描时,Oracle始终必须从段一直扫描到HWM,即使它什么也没有发现。该任务延长了全表扫描的时间。

当用直接路径插入行时 — 例如,通过直接加载插入(用APPEND提示插入)或通过SQL*Loader直接路径 — 数据块直接置于HWM之上。它下面的空间就浪费掉了。

在Oracle9i及其以前的版本中,可以通过删除表,然后重建表并重新加载数据来回收空间;或通过使用ALTER TABLE MOVE命令把表移动到一个不同的表空间中来回收空间。这两种处理方式都必须脱机进行。另外,可以使用联机表重组特性,但是这需要至少双倍的现有表空间。

在10g中,该任务已经变得微不足道了;假如您的表空间中支持自动段空间管理(ASSM),您现在可以缩小段、表和索引,以回收空闲块并把它们提供给数据库以作他用,让我们看看其中的缘由。

10g中的段管理方式

设想有一个表BOOKINGS,它保存有经由Web站点的联机登记。当一个登记确认后,就会把它存储在一个存档表BOOKINGS_HIST中,并从BOOKINGS表中删除该行。登记和确认之间的时间间隔依据客户有很大的不同,由于无法从删除的行获得足够的空间,因此许多行就插入到了表的 HWM 之上。

现在您需要回收浪费的空间。首先,准确地查明在可回收的段中浪费了多少空间。由于它是在支持ASSM的表空间中,您将不得不使用DBMS_SPACE包的SPACE_USAGE过程,如下所示:


declare

l_fs1_bytes number;
l_fs2_bytes number;
l_fs3_bytes number;
l_fs4_bytes number;
l_fs1_blocks number;
l_fs2_blocks number;
l_fs3_blocks number;
l_fs4_blocks number;
l_full_bytes number;
l_full_blocks number;
l_unformatted_bytes number;
l_unformatted_blocks number;
begin
dbms_space.space_usage(
segment_owner => user,
segment_name  => 'BOOKINGS',
segment_type  => 'TABLE',
fs1_bytes => l_fs1_bytes,
fs1_blocks => l_fs1_blocks,
fs2_bytes => l_fs2_bytes,
fs2_blocks => l_fs2_blocks,
fs3_bytes => l_fs3_bytes,
fs3_blocks => l_fs3_blocks,
fs4_bytes => l_fs4_bytes,
fs4_blocks => l_fs4_blocks,
full_bytes => l_full_bytes,
full_blocks=> l_full_blocks,
unformatted_blocks => l_unformatted_blocks,
unformatted_bytes => l_unformatted_bytes
);
dbms_output.put_line(' FS1 Blocks = '
    ||l_fs1_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line(' FS2 Blocks = '
    ||l_fs2_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line(' FS3 Blocks = '
    ||l_fs3_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line(' FS4 Blocks = '
    ||l_fs4_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line('Full Blocks = '
    ||l_full_blocks||' Bytes = ||l_full_bytes);
end;
/


输出结果如下:

FS1 Blocks = 0 Bytes = 0
FS2 Blocks = 0 Bytes = 0
FS3 Blocks = 0 Bytes = 0
FS4 Blocks = 4148 Bytes = 0
Full Blocks = 2 Bytes = 16384
 

这个输出结果显示有4,148个块,具有75-100%的空闲空间(FS4);没有其他空闲块可用。这里仅有两个得到完全使用的块。4,148个块都可以回收。

linux

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle Garled Codeを処理する方法 Oracle Garled Codeを処理する方法 Apr 11, 2025 pm 07:00 PM

Oracle Garledの問題は、通常、不適切な文字セット設定によって引き起こされます。ソリューションには、サーバー、データベース、クライアントの文字セットのチェックが含まれます。必要に応じて、サーバー、データベース、およびクライアント文字セットを設定します。 Convert関数またはdbms_lob.convert_lob関数を使用して、文字化けデータを修正します。常に文字セットを指定し、NLSパラメーターを正しく設定します。

Oracleを再び追求する方法 Oracleを再び追求する方法 Apr 11, 2025 pm 07:33 PM

Oracleは複数の重複排除クエリメソッドを提供します。個別のキーワードは、各列の一意の値を返します。 Group by Clauseは、結果をグループ化し、各グループの非繰り返し値を返します。一意のキーワードは、一意の行のみを含むインデックスを作成するために使用され、インデックスをクエリすると自動的に重複排除が行われます。 row_number()関数は、一意の数値を割り当て、行1のみを含む結果をフィルタリングします。min()またはmax()関数は、数値列の非繰り返し値を返します。交差する演算子は、2つの結果セットの共通値を返します(複製なし)。

Oracleの表空間サイズを確認する方法 Oracleの表空間サイズを確認する方法 Apr 11, 2025 pm 08:15 PM

Oracle Tablespaceサイズを照会するには、次の手順に従ってください。クエリを実行して、TableSpace名を決定します。DBA_TABLESPACesからTableSpace_Nameを選択します。クエリを実行してテーブルスペースのサイズをクエリします:sum(bytes)をtotal_size、sum(bytes_free)asavail_space、sum(bytes) - sum(bytes_free)as sum(bytes_free)as dba_data_files from tablespace_

クラウドサーバーに接続する方法 クラウドサーバーに接続する方法 Apr 11, 2025 pm 06:51 PM

Oracleクライアントを介してクラウドサーバーに接続する手順は次のとおりです。SSHキーを作成し、公開キーをクラウドサーバーにコピーします。 Oracleクライアントを構成し、クラウドサーバーの接続情報をtnsnames.oraファイルに追加します。 Oracleクライアントに新しいデータベース接続を作成し、ユーザー名、パスワード、およびDSNを入力します。 [OK]をクリックして、接続が成功していることを確認します。

Oracleデータベースの基本知識の概要 Oracleデータベースの基本知識の概要 Apr 11, 2025 pm 06:33 PM

Oracleデータベースは、信頼性が高く、スケーラブルで機能が豊富なリレーショナルデータベース管理システム(RDBMS)です。そのアーキテクチャは、サーバー側コンポーネント(Oracle Net)、インスタンス、共有メモリ領域(SGA)、バックグラウンドプロセス、データを保存するデータベースファイルなど、クライアントサーバーモデルに従います。基本的な概念には、表、行、列、一次キー、外部キー、インデックス、カーソルが含まれます。このデータベースは、高可用性、ビッグデータサポート、豊富な機能、強力なセキュリティ、使いやすさなどの利点で知られています。

Oracle文字セットを変更する方法 Oracle文字セットを変更する方法 Apr 11, 2025 pm 06:57 PM

Oracle文字セットを変更するには、以下が必要です。データベースをバックアップします。 init.oraファイルの文字設定設定を変更します。データベースを再起動します。既存のテーブルと列を変更して、新しい文字セットを使用します。データをリロードします。データベースリンク(オプション)を変更します。

Oracleのストアドプロシージャの使用方法 Oracleのストアドプロシージャの使用方法 Apr 11, 2025 pm 07:03 PM

ストアドプロシージャは、データベースに保存できるSQLステートメントのセットであり、別のユニットと繰り返し呼ぶことができます。パラメーター(in、out、inout)を受け入れ、コードの再利用、セキュリティ、パフォーマンス、モジュール性の利点を提供できます。例:ストアドプロシージャを作成して、2つの数値の合計を計算してOUTパラメーターに保存します。

Oracleで環境変数を構成する方法 Oracleで環境変数を構成する方法 Apr 11, 2025 pm 07:18 PM

Oracle Environment Variable Configuration Guide:Oracle_home Environment変数を作成し、Oracle Home Directoryを指します。 Oracle Binary DirectoryをPath Environment変数に追加します。 TNS_ADMIN環境変数を設定します(ファイルがTNSを使用して命名されている場合)。環境変数の設定を検証して、出力が設定変数を表示していることを確認します。

See all articles