痔になりやすい生活習慣とは?

はじめまして。CPUのコア数に関する質問です。
例えば、ある一つのサーバにCPUが2個、1CPUあたり6コアのスペックとします。
毎時定刻に、一つのバッチ処理が起動します。
そのバッチ処理は、多数のCSVファイルを入力として、チェック後、DBへ必要情報を更新します。
CSVファイルがめちゃめちゃ多い(数万件)ため、できる限り早く処理を実行したいと考えてます。
バッチ処理のアプリケーションは、シングルタスクです。
こうした条件のもと、OSは自動的に12コアのメリットを生かすようにジョブをコアに割り当てて
くれるものでしょうか?
私の周りには、技術者もどきが多く、いろんな意見があります。
ある人は、アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけという人と、アプリは意識しなくともOSが自動的にコアに割り当ててくれるという意見の人もいます。
本当のところどうなんでしょうか?
専門家のご意見をいただきたくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

バッチ処理は、「シングルタスク」で「シングルスレッド」です。


なので、結論から言えばコア1つの処理になります。

【マルチタスクとは】
複数のアプリケーションを同時に実行する処理の事です。
その際、シングルコアだと並列して処理するアプリケーションが順にスケジューリングされ、順番に処理されていきます。
なので、複数のアプリケーションが同時に実行出来ます。
※シングルタスクでは他のアプリが終了するまで、次のアプリは処理待ちになる。
また、マルチコアの場合はそれぞれのスケジューリングが複数のコアにスケジューリングされるので、コア数が増えれば処理速度が早くなる。
コア数が増えた場合、個々のアプリの速度は変わらないが複数のアプリを同時に実行した場合に早くなる。
例えば、シングルコアで4つのアプリを起動した場合に、シングルスレッドではそのアプリが終了するまで他のアプリは待ち状態となり、終わったら次へと処理されて行く。
マルチスレッドでは、4つのアプリがそれぞれプロセス単位でスケジューリングされ少しずつ順番にプロセスが処理されていきあたかも同時に実行しているかのように処理されて行く。
また、2コアだったとすると、4つのアプリのプロセスが2つのコアに分散されてスケジューリングされるので、1コアで2つのアプリが処理される。

【マルチスレッドとは】
一つのアプリケーションが複数のスレッドを作成し、複数のコアで同時に処理させる事です。
その為、コア数が増えればアプリ自体の速度がアップします。

なので、あくまでも仮にですが、バッチ処理が「シングルタスク」「マルチスレッド」だった場合、12コアを使用して高速に処理されます。

>アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけという人
これが、マルチスレッドの事です。

>アプリは意識しなくともOSが自動的にコアに割り当ててくれるという意見の人
これが、恐らくマルチタスクの事を言ってるのだと思います。
但し、複数同時にアプリを起動した場合に他の処理待ちにならないだけで、複数のコアに処理を振り分けてくれるわけではありません。
あくまでも、一つのアプリが使用するのは一つのコアです。
    • good
    • 0
この回答へのお礼

「シングルタスク」「シングルスレッド」の定義までご説明いただきありがとうございます。
結局今のアプリの作りでは、コアが多い恩恵が無いということですね。
これでモヤモヤしてものが取れました。感謝いたします。

お礼日時:2015/12/25 19:49

バッチ処理自体はシングルコアで実行されるが、DBのプロセスとは(おそらく)別コアで実行される、です。

バッチ処理がプログラムの中でフォークする仕組みでない限りは複数コアを使って演算してくれたりはしないと思います。もちろん、バッチ処理がスクリプト言語などで書かれており、その内部処理でフォークなどがプログラマに見えないところで実行されているのであれば、その限りではありません。
ちなみに、現代のCPUはスーパースケーラといって、1コア内にも複数の演算ユニットがあり、CPU自身がが命令レベルの並列性を見出したインストラクションについては可能な限り空いている演算ユニットに命令を詰め込んで処理を高速化しています。
    • good
    • 0
この回答へのお礼

これまでの回答に加え、より深い視点で回答頂き感謝します。大変参考になりました。有難うございます。

お礼日時:2016/01/01 10:13

>バッチ処理のアプリケーションは、シングルタスクです。


ということであれば、1プログラムでは1コアしか使いませんので、12コアを使うためには12多重でプログラムを動かす必要があります。
たとえばデータを12分割してそれぞれ並行に実行させるなど。
DBMSが同じシステムで動いているのであれば、DBMSもコアを使いますので、その分のコア数を引く必要があります。

>(1) アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけ
>(2) アプリは意識しなくともOSが自動的にコアに割り当ててくれる

言語によっては処理を自動的に多重化してくれる言語もあります。この場合は、プログラマが多重化を意識する必要はありませんが、言語の多重化の仕組みを効率よく使うためには、言語の多重化の仕組みを知った上でプログラミングする必要があります。その言語を使いさえすれば必ず多重化されるという物でもないです。

「アプリ」というものを「OSの上で動くプログラム」と捉えれば、(1)は正しくて(2)は間違いです。
「アプリ」というものを「プログラマが書くコード」と捉えれば、上に書いた通り言語によっては(2)が正しくなるケースもあります。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。総じていえば、No1,2の回答とズレていないと受け取りました。さらに、一歩奥の世界までご説明頂きありがとうございます。とても参考になりました。感謝いたします。

お礼日時:2015/12/26 16:50

> アプリは意識しなくともOSが自動的にコアに割り当ててくれる


↑同時に複数のコアにジョブを割り当てるという意味においては幻想です。OSが使用するコアを決定するという意味においては正解です。

一般的にシングルタスク・シングルスレッドモデルのプログラムでは、アプリケーションプログラムの処理そのものが同時に複数のコアへ割り付けられることはありません。(コア間を移動したりすることはありますが、あくまでも移動であって同時複数使用ではありません)

よって、複数コアを同時に使える可能性を持ったプログラムモデル=マルチスレッドモデルやマルチタスク(マルチプロセス)モデルを採用したプログラムでなければなりません。
    • good
    • 0
この回答へのお礼

結局今のアプリの作りでは、コアが多い恩恵が無いということですね。
最初の回答者様と同じ意味の回答でより一層納得できました。
これでモヤモヤしてものが取れました。感謝いたします。

お礼日時:2015/12/25 19:51

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QマルチコアCPUはコア数が多ければ多い程有利なのではないのですか?

最近マルチコアのCPUをよく見かけます、

それで、例えば、Core2DuoとCore2Quadを比べた質問、についてですが、
この手の質問では、Quadはマルチスレッド対応アプリを使わなければ
Duoと大きな違い感じられないという回答がよく見られます。
又、むしろ消費電力が大きくなり2コアに比べクロック数も低いので
対応アプリを使わなければ逆に4コアは不利であるという意見もあります。

しかしどうも疑問を感じます。
上記の内容はあくまで一つのアプリを動作させた場合の事を想定した物なのでは?
ごく日常での使用ではコア数が多い方が有利なのではないですか?

私の考えとしては、まずPCを扱う際一つのアプリのみを起動しPCを使用する人はまずいないという事から、
使用中に他のアプリや別のプログラムを実行するという場合も大いに考えられますし、
実際にタスクマネージャなどを見てもOSを起動起動するだけでかなりのプロセスが実行されいくらかCPUを食っています。
するとその様なマルチコア向けのアプリケーションを使用せずとも多数のシングルスレッドのプロセス実行と共に
複数のスレッドが発生し、結果例え速度的な変化は感じられずともマルチコアの恩恵を受ける事が出来るのではないか?
と、私は思うのですがこれは間違いなのでしょうか。

それとも実際は上記の内容は間違いでそう都合良くは出来ていない物なのでしょうか?

長くなってしまいましたが回答いただけると幸いです、よろしくお願いします。

最近マルチコアのCPUをよく見かけます、

それで、例えば、Core2DuoとCore2Quadを比べた質問、についてですが、
この手の質問では、Quadはマルチスレッド対応アプリを使わなければ
Duoと大きな違い感じられないという回答がよく見られます。
又、むしろ消費電力が大きくなり2コアに比べクロック数も低いので
対応アプリを使わなければ逆に4コアは不利であるという意見もあります。

しかしどうも疑問を感じます。
上記の内容はあくまで一つのアプリを動作させた場合の事を想定した物なのでは?
ごく日常...続きを読む

Aベストアンサー

マルチコアがどれくらい有効なのかは、ユーザーの使用の仕方で大きく変わってきます。
具体的な「使用中に他のアプリや別のプログラムを実行する」の頻度次第ですね。
しかも、単に複数のシングルスレッドアプリを立ち上げるだけでは、マルチコアの意味はありません。

まず、通常の利用方法である、同時に1アプリしか使っていない状況でも、
デュアルコアの意味はあります。「OS」と「使用しているアプリケーション」の2スレッド。でも、この場合は3コア以上あっても意味無し。
あるアプリの使用中に他のアプリを立ち上げても、その両方を同時に使うのでなく、切り替えて使う場合は、使ってない方のアプリはCPU時間を消費しません。

ここで「常時稼働してCPU時間を消費する」ようなアプリを裏で稼働させるような作業をして、初めて3コア目が役に立ちます。
たとえば、「通常の作業をしながら、裏でウィルス対策ソフトによるスキャンをする」とかですね。この場合、ウィルス対策ソフトは常時稼働していますから、ユーザーが操作しているアプリとOSと併せて3コア分は意味があります。

そんな感じで、日常的に「単に起動しているだけではなく、稼働してCPU時間を多大に消費している」ようなアプリをコア数に匹敵するだけの多数動かしているのであれば、「コア数が多い方が有利」といえるでしょう。
そうでなければ、コアが多くても無駄なだけです。

具体的には、タスクマネージャでプロセスタブを選んで、「CPU」をクリックしてCPU使用率の順で並べたときに、
「CPU使用率の高いプロセス」がどれだけあるかで判断できるでしょう。
CPUを使ってるプロセスが1つしかないとか、System Idle Process が一番高いとかだったら、マルチコアの恩恵はほとんどありません。
「30%ぐらいのプロセスが3つある」とかいった状況だったらクアッドコアの意味が出てくるでしょう。

マルチコアがどれくらい有効なのかは、ユーザーの使用の仕方で大きく変わってきます。
具体的な「使用中に他のアプリや別のプログラムを実行する」の頻度次第ですね。
しかも、単に複数のシングルスレッドアプリを立ち上げるだけでは、マルチコアの意味はありません。

まず、通常の利用方法である、同時に1アプリしか使っていない状況でも、
デュアルコアの意味はあります。「OS」と「使用しているアプリケーション」の2スレッド。でも、この場合は3コア以上あっても意味無し。
あるアプリの使用中に他のア...続きを読む

QlinuxマルチコアCPU環境においてコアの使われ方について

linuxマルチコアCPU環境においてコアの使われ方について


マルチコアCPUがLinxu環境において(その他Linuxでないプラットフォームにおいても)、
実際に搭載されているCPUのコア数が正常にOSに認識されているというだけではなく、
各プロセスの処理に対して複数のコアが適宜効果的に利用されているのかどうか??
ということが知りたく、添付画像に私の疑問点をまとめてみました。

■ポイント
++++++++++++++++++++++++++++++++++++++++++++++++
投稿した画像の色がついている4つの矢印は1つ1つそれぞれがDB接続クライアントがmysqlに投げているSQL文(クエリ)をイメージしています。
Mysqlを起動させているlinux kernelは、このクエリを受け取り自身が管理しているCPUがマルチコアであった場合、どのようなロジックで複数のコアの中から4つのクエリを処理させるCPUコアを選択しているのでしょうか?

例)kernelが未使用のCPUコアを都度選んで1クエリの処理を担当するよう制御している
⇒コアによって処理する数は異なる

例)kernelが4つのクエリに対して4つのCPUコアをラウンドロビン分散させて処理させている。
⇒コアが処理する数は均等になる
++++++++++++++++++++++++++++++++++++++++++++++++

どなたか、私の疑問についてご存知でしたらご教授いただけますでしょうか。

よろしくお願します。

linuxマルチコアCPU環境においてコアの使われ方について


マルチコアCPUがLinxu環境において(その他Linuxでないプラットフォームにおいても)、
実際に搭載されているCPUのコア数が正常にOSに認識されているというだけではなく、
各プロセスの処理に対して複数のコアが適宜効果的に利用されているのかどうか??
ということが知りたく、添付画像に私の疑問点をまとめてみました。

■ポイント
++++++++++++++++++++++++++++++++++++++++++++++++
投稿した画像の色がついている4つの矢印は1つ1つそれぞれがDB接続...続きを読む

Aベストアンサー

カーネルバージョンによってスケジューリングが異なりますが、どのバージョンでも、無用なオーバーヘッド低減のために、プロセス単位でCPU時間を割り当てていたと思います。

Qlinuxでプロセスが動いているCPUナンバーを知りたい

linuxでプロセスが動いているCPUナンバーを知りたい
件名の通り、linuxでプロセスが動いているCPUナンバーを知りたいとおもっています。

psコマンドですと、プロセスID等はでますが、
デュアルコア、クワッドコアのどのcoreでプロセスが動いているのかを確認したいので
すが、表示できません。

なにか方法がありますでしょうか?

CPU(core)ナンバーとプロセスIDが結びつけば問題ありません。

mpstat -P 0

は使用率しかでなく、プロセスが見えませんでした。

よろしくお願い致します。

Aベストアンサー

Linux って, 各プロセスに対して常に同じコアを割り当てるんでしたっけ?
そうじゃないとすると「調べた時点での割り当て」はわかるけど, その次にはどうなってるかわからないからあんまり意味があるようには思えないのですが....

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

Qtopコマンドで表示されるVIRT、RESおよびSWAPの意味について

topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。
CentOS5.4上で動作しているアプリケーションの使用メモリについて調査しています。
サーバのメモリ容量は512MBで、この上でスワップアウトしないようにアプリケーションの起動数(常駐)を調整しようとしています。

topコマンドでプロセスが使用している物理メモリ容量はRES項目を見れば良いことがわかっていますが、VIRT(仮想メモリの総量)とSWAP(スワップされたサイズ)が具体的に何を示しているのかがわからず、困っています。

topコマンドの出力結果は下の通りです。
この検証用サーバでは暫定的にパーティション設定でスワップ領域を作成していません。
しかしtopコマンドではVIRTとRESの数値は差異があり、SWAP項目も大きな値を示しているプロセスがあります。

スワップ領域が無いのではtopコマンドはVIRTとRESが同じになり、SWAPはゼロとなると予想していたのですがどうしてならないのですか?

top - 03:35:44 up 36 min, 3 users, load average: 0.13, 0.17, 0.20
Tasks: 90 total,  1 running, 89 sleeping,  0 stopped,  0 zombie
Cpu(s): 0.0%us, 1.3%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.7%si, 0.0%st
Mem:  515340k total,  452152k used,  63188k free,  18132k buffers
Swap:    0k total,    0k used,    0k free,  347404k cached

 PID USER    PR NI VIRT RES SHR S %CPU %MEM  TIME+ SWAP COMMAND
 4602 tomcat  25  0 645m 28m 6996 S 0.0 5.8  0:04.12 616m java
 2227 root   34  19 25656 10m 2108 S 0.0 2.0  0:00.12 14m yum-updatesd
 1680 root   17  0 11580 9964 240 S 0.0 1.9  0:00.02 1616 restorecond
 1936 haldaemo 18  0 5472 3676 1688 S 0.0 0.7  0:01.20 1796 hald
 2499 root   18  0 10540 2916 1504 S 0.0 0.6  0:00.03 7624 httpd
 3672 root   15  0 10064 2888 2308 S 0.7 0.6  0:02.50 7176 sshd
 3927 root   20  0 9916 2880 2308 S 0.0 0.6  0:00.34 7036 sshd
 2054 root   18  0 10116 2328 1696 S 0.0 0.5  0:00.04 7788 cupsd
 2500 apache  25  0 10540 2088 640 S 0.0 0.4  0:00.00 8452 httpd

どうしてもズレるので画像を添付してます。

topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。
CentOS5.4上で動作しているアプリケーションの使用メモリについて調査しています。
サーバのメモリ容量は512MBで、この上でスワップアウトしないようにアプリケーションの起動数(常駐)を調整しようとしています。

topコマンドでプロセスが使用している物理メモリ容量はRES項目を見れば良いことがわかっていますが、VIRT(仮想メモリの総量)とSWAP(スワップされたサイズ)が具体的に何を示しているのかがわからず、困っています。
...続きを読む

Aベストアンサー

答えにたどり着く前に、若干長めの説明が必要です。

> topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。

 RESは、ご認識の通り、そのプロセスの物理メモリ使用量です。

 VIRTとして表示されている仮想メモリ総量とは、そのプロセスの
仮想アドレス空間の中で、有効となっているページの総量です。
これに計上されるのは、参考リンクの「仮想記憶の概念図」でカラフルに
描かれている「物理メモリ」や「スワップ」に対応するページのほか、
以下のようなものも含まれます。

・プロセスが確保したメモリのうち、まだ一回もアクセスして
 いない部分。
  ⇒アクセスしたときに初めて物理メモリが割り当てられ、
   RESにも計上されていきます。
  (javaのRESに比べてかなり大きいVIRTは、これによるものと
   思われます。大きなヒープサイズを指定していませんか?)

・プロセスが ファイルを仮想メモリ空間にmmap(2) したが、
 まだ一回もアクセスしていない部分。
  ⇒Linux(UNIX) には、あたかもメモリをアクセスするかのように
   ファイルを読み書きできる mmap(2) という機能があり、
   かなり多用されています。mmap直後のファイルは、
   VIRTには計上されますが、物理メモリには読み込まれずRESには計上
   されません。ファイルをmmapした仮想メモリ空間にアクセスした
   部分が、物理メモリに読み込まれRESに計上されます。

> スワップ領域が無いのではtopコマンドはVIRTとRESが同じになり、
> SWAPはゼロとなると予想していたのですがどうしてならないのですか?

実は、SWAPとして表示される数値は、単に VIRT と RES の差です。

VERT(仮想メモリ総量)の中には、物理メモリ(RES)やスワップ領域の
使用量だけなく上記で挙げたような仮想空間の部分の合計が含まれ
ますから、スワップ領域がゼロでも、上記で挙げたような空間が
SWAP として表れているのです。

個人的にはこの数値をSWAPと呼ぶのは、かなり不適切だと思いますが、
多くのLinuxディストリビューションのtopコマンドで表示される
SWAP欄は、そういう計算をしているということです。

参考URL:http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6

答えにたどり着く前に、若干長めの説明が必要です。

> topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。

 RESは、ご認識の通り、そのプロセスの物理メモリ使用量です。

 VIRTとして表示されている仮想メモリ総量とは、そのプロセスの
仮想アドレス空間の中で、有効となっているページの総量です。
これに計上されるのは、参考リンクの「仮想記憶の概念図」でカラフルに
描かれている「物理メモリ」や「スワップ」に対応するページのほか、
以下のようなものも含まれます...続きを読む

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

QLinuxのgccのインクルードパス?

Linuxのgccで、インクルードファイルやライブラリのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。

gccとccの違いも知りたいです。

例)
#include "example.h"

このままだと、example.hが無いと表示されます。

Aベストアンサー

標準ライブラリのパスは、gccのインストール時に指定して、Cプリプロセッサの中に組み込まれます。

#include "example.h"
は、まずカレントディレクトリを探し、次に gccコマンドラインの -I オプションで指定したディレクトリを探し、最後に標準ライブラリが探されます。

#include <example.h>
は、カレントディレクトリを探さない点が異なります。

ccも基本的には同じですが、Unixの種類によって機能が異なる可能性があります。Linuxの場合はcc=gccです。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qデータを削除しても表領域の使用率が減りません

いつもお世話になっております。

今使用している表領域の使用率が高くなってきたため、
不要なテーブルやデータを削除しました。

ですが、少ししか使用率が減らず困っています。

テーブルを削除した際にはPURGE RECYCLEBINで、BIN~のテーブルも
消しています。

何か他に原因があるのでしょうか?

Aベストアンサー

前の方のおっしゃるとおり、DELETEしただけでは領域は開放されません(ハイウォーターマークが下がらない)ので、以下を試してみてください。

1.該当テーブルの全件削除で良い場合
truncate テーブル名 drop storage;
を実行する。
これで領域も開放されます。(最後のところをreuse storageとすると領域保持する意味となる)

2.部分的にdeleteして、領域を開放したい場合
alter table テーブル名 enable row movement;
alter table テーブル名 shrink space cascade;
alter table テーブル名 disable row movement;
を実行する。
1行目は領域開放の前準備、3行目は1行目の変更を元に戻す意味。
2行目でcascadeしておくと、関連インデックスの領域も一緒に縮小してくれます。


人気Q&Aランキング