• 締切済み

ORACLEのテーブル作成

ORACLE8iのテーブル作成で、 FREE、USEDEなどのパフォーマンスに関わるようなものの設定の適正値をどなたか教えて下さい。 (いまいち、何を指定してけばよいのかわからないのです。。。とほほ) デフォルトで充分なのか、または適正値の算出する方法などがあるのでしょうか? よろしくおお願いいたします。

みんなの回答

  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

Free,Usede(Used?)は、PCT FREE,PCT USEDのことでしょうか? そうであれば、適正値を判断するのは難しくなります。 詳しいことは、Oracleのマニュアル(データベース、チューニング)を読んでいただくとして、簡単に説明すると、PCT FREEは、あとからUPDATEコマンドを使ってデータを更新するときに、データ量が増えることがありますよね。(たとえば、VARCHAR2の列で、空白だった列を50文字ぐらいの文字列にするなど)当然それだけの容量が新たに必要になるのですが、そのようなときのためのあらかじめとっておくための空きの容量です。具体的にはパーセントで示しますので、データベースの容量にPCT FREEをかければあらかじめあけておく量となります。もし、この容量が小さすぎてあふれた場合、1つの行がばらばらに格納され、パフォーマンスが悪くなることになります。なお、INSERTでばらばらに格納されることはありません。(まったくないわけではありませんが、INSERTでばらばらに格納されるならば、それは、ORACLE BLOCKのサイズが小さすぎるということで、PCT FREEが原因ではありません) PCT USEDは、一度作られた行を、DELETE文などで削除した場合、その部分に空きができますよね。当然その部分をそのままほっておくのはもったいないので、新しい行を追加するときには、使いたいのですが、すぐには使いません。INSERTするときにデータの容量がPCT USED(同じくパーセントで示します)以下になっていれば、空いた部分を使ってデータを追加します。 つまり、まっさらなデータベースにデータを追加するときは、残り容量がPCT FREEになるまではそのまま追加し、さらに追加するときはPCT FREEだけ残して別の部分を使ってデータを追加します。 UPDDATEするときは、以前は言っているデータより大きいデータで更新するときに、PCT FREEで確保した部分を使います。 DELETEするときは、そのまま削除するのですが、データ容量がPCT USED以下になるまで再利用しないということです。 では、どう設計するかですが、上記の原理を理解して設計するのですが、そのデータベースをどのように使うかで決まります。つまり、UPDATEが多くINSERT時はデータ量が少ないのであればPCT FREEは大きくしておく必要がありますが、UPDATEがほとんどない場合は、PCT FREEを小さくしたほうが、データベースが小さくなりますしパフォーマンスもよくなります。 PCT USEDも同じで、DELETE分が多いのであれば大きめにしてやると、データ容量は小さくなりますが、連続的に追加したデータがばらばらに追加される可能性がありますので、パフォーマンスが落ちるかもしれません。逆にDELETEがほとんどないのであれば、大きくとってやればデータ容量も小さくなりパフォーマンスもあがることになります。 つまり、どれだけ使い方を把握できるかになります。わからなければ取りあえずデフォルトで使い、運用やテストするときにデータベースの状態を分析し、適正な値を見つけるというのが、普通です。ただし、よほど特殊なことをしない限り(DWHやパフォーマンスが厳しいとき以外)気にしなくてもいいように思います。パフォーマンスに関しても、このあたりの値よりも索引やSQL文の書き方のほうが大きく影響します。 このあたりの講習会としては「ORACLE データベース管理 基礎編」をお勧めします。

関連するQ&A

  • Oracleのテーブル作成スクリプトを作成したい

    Oracle8i のDBA Studioで数十の表を作成したのですが、ここからテーブルの作成スクリプトを出そうとして困りました。いわゆる Create Table文なのですが、これを自動で簡単に作る方法はないでしょうか?SQL-ServerのEnterprise Managerでは、SQLスクリプトの作成があって、Create文を簡単に生成できるのですが、これと同じような感覚で、既に作成してあるテーブルのCreate文を出力する方法はないでしょうか?Oracleには、ほとんど慣れていないので、方法があると思うのですが、探し方が悪いらしく途方にくれています。どなたかよい方法を御存じないでしょうか。

  • Oracleテーブル作成について

    Oracle初心者です。 表領域 TEST_TABLESPACEがあるとします。 (サイズは、1024Mと仮定) (1)この表領域に一つのテーブル TEST_TABLEを作成します。 (サイズは、INITIAL 512M NEXT 512M) ここで質問なのですが、例えば上記でテーブルの NEXTを600Mとかにすると、データが512M以上入って NEXTのサイズが拡張された場合、エラーが発生するのか それとも、最大の512Mが拡張され、1024M分のデータが 入らない限り、エラーが発生しないのか? 教えていただけますか? (2)テーブル作成のDDL内でSTORAGE句指定しない場合、 INITIALとかNEXTは、どう設定されますか? 長々と申し訳ないですが、よろしくお願いいたします。

  • oracle テーブルコピー

    はじめまして 現在、oracle9iを使い、開発しています。 宜しければご回答の方をお願い致します。 スキーマAAAにあるテーブルBBBをテーブルデータは不要として スキーマCCCに同じ定義のテーブルBBBをコピー作成したいと考えています。 どのように行えば、良いのでしょうか。 当方、初心者ですが、何卒ご回答の程、よろしくお願い致します。

  • テーブルのデータコピーについて

    初めて質問します。よろしくお願いします。 OS:Windows2000 現在、Oracle8iを使用しています。 PC1のOracle8iに作成したテーブルA内のデータを、 PC2のOracle8iに作成したテーブルBに全て データをコピー又は移動させたいと考えています。 テーブル構造は、PC1、PC2共に全て同じです。 ※PC1とPC2は同じLANでつながっています。 どういった方法があるでしょうか?

  • Oracle 10g XE CSVからテーブル作成

    いつもお世話になっております。 無償版のOracleデータベースの10g XEでCSVファイルを読込み、テーブルを作成しているのですが、 すべての行を読込みできません。 エラーは発生しないです。CSVのファイルサイズは1,971KB、行数は16,436行、列数は28列。 すべての行を読込み、テーブルを作成する方法はないでしょうか? それとも、XEで制限があるのでしょうか?

  • Oracleはどの程度まで巨大なテーブルを扱える?

    稼働中のOracle9iデータベースに新規テーブルを追加することになりました。 なのですが、現在利用中のテーブルに比べて、新規に扱おうとしているデータ量が格段に多く、 どれほどメモリを増やせばいいのか、普通にパフォーマンス評価できるのか、 それ以前に使い物になるのかといったことが全くわかりません。 サーバOSは64bitのSolaris8、メモリは4GBほど積んでいます。データのほうですが、 格納すべきデータが1日最大2000万件ほど発生します。データ保持日数は4ヶ月で、古いものから消していきます。 つまり、単純計算で一テーブル最大で約25億レコードが蓄積されることになります。 1レコードあたり概算で256バイトとして、600GBを超えます。 (ストレージは1TBくらい用意して、日付でパーティション分けして・・・とか考えてます) いきなり全部解決しようとは思いませんので、 巨大なDB構築に際して注意点、参考になる文書などご存知ありませんでしょうか?

  • ORACLEテーブルを作成したSQLを調べたい

    バックアップに別サーバに同じORACLEテーブルを作成することとなりました。 どんなSQLでそのテーブルを作成したのか資料が無くてわかりません。 調べる方法を教えてください。よろしくお願いします。

  • oracleのテーブルimportについて

    oracle10gを使用しております。 oracleのimportについて質問いたします。 テーブルAをExportしてdumpファイルを作成し、テーブルAより任意のレコードを削除、 commitを行います。 後に、テーブルレコードを削除前に戻したいと思った場合、 dumpファイルを用いて、削除したレコードだけを元に戻すことは可能でしょうか? 現状ではテーブルAを削除し、dumpファイルをimportしてテーブル、レコードを復元しておりますが、 これ以外に方法はありますでしょうか。 回答、宜しくお願いします。

  • ORACLEでのSQLについて

    SQLについて教えてください。 今、VBからORACLEデータベースにSQLを投げる処理を作っているのですが、 一つわからないことがあります。 例えば、アクセスでは、クエリで新しいテーブルを作成するという考え方がありますが データベースがORACLEでも同じようなことができるのでしょうか? 別に新しいテーブルを作成することに執着するわけではなく、テーブルのデータを削除 してから、そのテーブルにSQLにて引っ張ってきたデータを入れる という ものでもいいと考えています。そのやり方でもかまいませんので教えてください。 宜しくお願いします。 Oracle8.1.6 vb6

  • オラクルのテーブルについて

    質問があります。 SQL文で指定したテーブル(test_tbl)のCREATEされた 日時とかわかるようなものはないでしょうか? たとえばテーブル (table_a, table_b, teble_c:全て同じ構成だが格納データが異なる)が あって一番最後に作成されたテーブルに アクセスしたい場合なんですが どのようなSQL文になるでしょうか? またそんな事はSQLではかけないような場合、 どのようにすればテーブルのクリエート日付を取得 することができるでしょうか? 宜しくお願いいたします。