Oracle 質問総合スレ13 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>42
そうだろうね。
後はテープなり何なりにダンプを落とすかだね。 >>45
ググって見直してみたら確かにそう書いてありました。何となくなるほどと思っても、Javaの実装にどう当てはめて考えれば良いか難しいです。。
JavaWebアプリ(springframework,mybatis使用)で何千万のinsertを送るのを早くしたいのですが、無理なのでしょうか?それともうまいこと実装できれば可能なのでしょうか。トランザクション管理はspringframeworkの@DBTransactionとConnection.commitでやってます。
>>46
今日相談した結果、セキュリティ要件の問題はあるかもしれないけどやっぱりNFSでやらせてもらえないか確認しようってことになりました。NFSでやることになると、apサーバのシェルからsqlplusでログイン後クライアント経由でファンクションを呼ぶことになります。 >>48
それは既にやってまして、mybatisのbatch insert(リストに貯めてflush呼ぶと一気に投げる)というのを使ってます!
正直それを使ってると、どう投げていてどういう理由で早いのかは理解できてないのですが。。(調べたけど見つからず) >>47
DBA的には嫌だけど、12cだったらAPPENDヒント使って、常に使用ブロックの上側に
書き込ませる様にすれば、言ってみればダイレクトインサートを使った時と同じ動きと
なるから、パフォーマンスが改善する事もあるみたいだな。 Webアプリで何千万ものインサートって
なかなかアクロバティックなシステムだね 何千万のインサートなら、バッチ処理として、sqlloaderでダイレクトパスインサートするのが一番早い気がする >>51
しかも出来上がってるものを性能改善しろだなんて、えーって感じです笑
>>52
sqlloaderも検討しました。それをやるやめにはまず完成されたinsert文をcsv出力する必要があると思っているのですが合ってますでしょうか?
DBアクセスはmybatisにお任せしていて、完成されたinsert文をcsv出力できないのではないかと思ってます。(調べてもログに出せるくらいのことしか見つからず)
csv出力できたとして、values句を使ったinsert文なのでcsvに書かれているinsert文にヒント句付ければ良いのでしょうか。。でもヒント句が出てくるとなるとパラレル処理の話が出てくる、、? いや、insert文じゃなくて普通のcsvファイルが必要。
csvのどの項目がどの列かってのは、sqlloaderの制御ファイルで指定する。ダイレクトパスとかの指定は、sqlloaderにオプションで渡すか、制御ファイルに記載する。 >>54
一度だけ試したことはあったのですが、、全然違いましたね笑
やるとしたらinsertしたいテーブル分、csvファイルと制御ファイルのセットが必要でしょうか。。?
昨日一昨日ご相談した、asm/acfsについては環境の人に聞くとNFSにさせてもらうしかなさそうだねと言われました。
acfsがベターなのですが、今は暗号キーを置く場所として存在してるだけでapが何ギガものファイルを置く想定などないため、大きめの再構築が必要になるし無理!とのことでした。
ちなみにasmにはdb構成ファイルやdbバックアップ用?のダンプファイルなどを置くので領域はたくさんあるとのことでしたが、dba側の大事なファイルが入ってるasmをapが使うのは違うかねぇという話でした。 >>51
ちなみに、、画面のあるwebアプリと同じようにspringframework-javaで作っているので話をわかりやすくするためにwebアプリといいましたが、実際はバッチです。apサーバとは異なるバッチサーバで動作してます。シェルでもありません。
>>45
サーバにsqlplusでログイン
alter session
update文
select from v$pq_sesstat
だけやってもダメなのですが、なにがダメなのかわかりません。余計な更新行に対するselectなどはしてません。
教えて頂けませんかm(_ _)m パラレルになるかどうかは
まずはEXPLAINで確認したら? >>57
まだお試しなので1行でやってます!
>>58
実行計画とったところno pdml because no partitionみたいなエラーが出てました!実行計画はこういうのも教えてくれるんですね☆
このテスト環境は無理なんだと判断し、本番環境で試したらpdmlの結果が1になりました\(^^)/ありがとうございます!明日処理を組み込んで次の段階を試してみます! >>59
>まだお試しなので1行でやってます!
おいーーーー!!! >>59
一行をどうやってパラレル処理するんだよ? >>60
え(’o’)
>>61
えーーーーーーー!Σ(;゚д゚ノ)ノ─ッ!!
えーと、、ひとつで意味あるのか!?とは思ってはいたんですけど、今はpdml結果が1以上になるかをまず確認したかったのでひとつでやってました!
昨日ひとつでやってやっと1になったので、今日まず100くらいのデータからやってみようと思ってます!sqlplusからと実際Javaプログラムに組み込むのと両方試す予定です。
ちなみにですが、
1.sqlplusでログイン
2.alter session
3.insertやupdate実行
4.SELECT * FROM v$pq_sesstat でpmdlがいくつになっているか確認
この3.のときは、例えばinsert into - values(...);を100行コンソールに貼り付けてドンドン送る。というやり方で問題ないでしょうか?
それでも良いけど100じゃ少ないよ、insert allやこういうやり方の方が一気に送れて効果をみやすいよ、などあればコメントお願いしますm(_ _)m なんかそれだとjava的には一行ずつ渡してる感じじゃね?
そもそもinsertのパラレル化処理なんて、別テーブルから一気に読み込んだりするぐらいしないと効果は体感出来ないと思うぞ? >>63
Java側でmybatisのバルクインサートを使用しており、以下の要領でSQLは投げているようです。(一つ一つ投げているわけではないと思ってます)
insert into person
(id, name, address)
values
(1, 'John', 'Kyoto'),
(2, 'Mike', 'Tokyo');
昨日pdml結果が1になったと言ったのですが、その時はupdateで1でした。今日本来やりたいinsertで試したら1以上になってくれずオール0でした。
実行計画をとると以下の内容ですが、どうすればinsert /*+ APPEND_VALUES */ into values ...がpdmlになってくれるのかわかりません。。
「Degree of Parallelism is 1 because of session」「PDML disabled because
insert values was used」
Degreeって自動パラレル設定のことぽくてあまり関係なさそうだし、もう自分の中で打つ手がない状態です・・・。自動パラレル設定を検討した方が良いということなのでしょうか。 >>614
insert valuesは一行インサートだからパラレル化できないよっていってるんじゃないの?
insert selectじゃないとパラレル化できないよってことね。 >>65
11gからvalues句のinsertもパラレル対応されて、append_valueヒント句を使えるようなこと書いてあるんですよね(><) 何か条件を満たしていないんでしょか。。
このままだとパラレル化は一旦諦めることになりそうです。
次はinsertをsqlloaderでやる検討になるかな。。 今更かもですがパラレル処理って、既に登録されているデータにアクセスするアクセス方法を効率化させること、が主にやりたいことなのでしょうか??
だから、insert〜selectだったりただのselectだったりupdate〜whereだと、パラレル処理で動くが、insert〜valuesだと検索が必要ないのでパラレルにならない。
ということなのでしょうか?
それがそうだとしたら、なぜ11gからはinsert〜valuesも対応しはじめたのか。。これが出来るとしても検索ありのものとは、違う理屈で早くなったということなのかなと思いはじめました。 メモリに一時テーブル作ってからINSERT SELECTしてみればいいんじゃないの
あとテーブルのパーティショニングはちゃんとやってるのかな? >>68
◇ケース1:pdml結果が0でダメ(本来やりたいのはこちらのins〜values)
ALT SESSI FORCE PARALLEL DML PARALLEL 3
ins /APPEND_VALUES / into tablename (culuma,culumb) value ('aaa','bbb')
※上記のようなinsを1000行一気に貼り付けて流した ※上記ins文のexpl plan結果は報告済み ※ヒント句なしも試した
SEL STATISTIC,LAST_QUERY,SESSION_TOTAL FRO vpq_sesstat
◇ケース2:pdml結果が1(insertができないからupdateでお試し)
ALT SESSIO FORCE PARALLEL DML PARALLEL 3
upd tablename set culuma 'aaa' where culumb 'bbb'
SEL STATISTIC,LAST_QUERY,SESSION_TOTAL FRO vpq_sesstat 恐らくセキュリティ対策でSQLは書き込めませんでした。色々文字を削ってやっと書き込めましたので、ご了承ください。重要な所がわからなくなったいたら聞いて頂けたらと思います。
>>69
パーティションがどうなってるかなどはわかってないです。。複数パーティションに及ぶような更新にならないとパラレルにならないっていう話でしょうか?
正直そこそこ時間かけたのに出来ていないので、この先に必ずinsert〜valuesをパラレル化出来る保証があるのであれば良いのですが、、もう諦めムードになってきたのが正直なところです。
私が67で書いたことについてコメント頂けると助かりますm(_ _)m >>70
そのソースじゃなくて、11gで対応されたという情報のソース >>73
いやそれ、パラレルじゃなくて、ダイレクトパスやん。。 >>74
すみません、おっしゃってることがわかりますん。。
パラレルとダイレクトパスインサートはニアイコールなのかなくらいに思ってるんですけど、どう違うんでしょうか??
ということは、select〜values文のパラレル処理はできないということですか? とにかくわたしは大量のinsert〜values文を早く処理させたいです。 パーティションの話を出したのはチューニングするなら
高い効果が見込めるところから検討すべきって話
もちろんいろんな事情で出来ないとかやっても効果が限定的になりそうって場合もあるけどね
チューニングに必要な情報をまず集めて
最初にいろんな選択肢を出した上でどれから試すか決めないと
パーティションがどうなってるかはわからないけどとりあえずクエリだけ並列化してみるってのは
すぐ試せるだけの力があればいいけど、そうじゃないならアプローチとして微妙
まあ、がんばって みんな丁寧に相手し過ぎ。
素人過ぎて話にならんレベルだろ。 皆さまお付き合いありがとうございます。昨日は投げやりなコメントをしてしまいました。言われていることがわかってきたかもしれません。わたしの理解を書かせて頂きます_(._.)_
パラレル処理「alter session後のSQL文が並列にデータにアクセスして処理される」、ダイレクトパスインサート「データベースバッファを経由せずデータファイルへ直接データを登録すること」
わたしがやりたいことは「大量のinsert〜values文を2倍程度早く処理させたい」ので、76さんのサイトに書いてあるように「パラレル処理はむり」で、「insert /append_values/の書き方でダイレクトパスインサートはできる」と理解しました。
>>77
パーティション構成次第でパラレルできるできないという話かと思ってましたが、別の話でパーティション構成を変えることで改善されることもあるという話だったんですね。
わたしはJavaAP開発者なのでインフラ側までは口出すことができず、SQL改修などでできる性能改善をやろうとしてます。1table1000万recordをselectしたりするのでパラレルクエリもいつかは実装できたらなとは思ってます。 >>80
だからsqlldrでやれや。
ダイレクトもパラレルも比較的簡単にできるから。 >>81
はい!sqlloaderを検討します。月曜日からsqlloaderを試せるように下調べしてみます。 >>81
わざわざWebアプリでやってるんだからsqlldrは要件に合わんのだろ
やるにしてもExternal Tableだけど、そういうLOAD系が使える話じゃないんじゃね? マジカ。。
それでいいならINSERTとか最初から選択しなくてもよかったんじゃ。。。 シフトザオラクルなんかソースとして持ち出すとか、よくわからないけど日々ググってコピーして仕事してます臭がくっさいくっさい。 sqlloaderは難しいですかね・・・。もし実現できるとしても結構な改修量になる上に懸念点も出てくる気がしてるので、避けたい選択肢ではあります。
sqlloaderが難しいとなると、insert文に/append_value/を付加したダイレクトパスインサートにできるくらいでしょうか
>>84
すみません、どこの話に対してのコメントですか?
>>85
否定はしません。。皆さんは公式マニュアルなどを見ながらって感じですか? >>86
つっこむデータをcsv等のファイルに落とせるんだったら、後は簡単だろ。
改修する前に、早くなるかどうかの検証するくらいならすぐできるだろ >>87
だよな。
こんな簡単なこともできないのか、とただ呆れるばかりだよ。
改修も簡単。 >>88
それな!
読まないでネットで質問したり、誰が書いたのかわからんホームページの落書きをよく仕事で使おうとするわ。
客や上司になんて説明すんだろね。 皆さまありがとうございます。ではsqlloaderを検討してみようと思います。
エラーハンドリングがどうなるのかは気になるところではありますが、まずJavaからsqlloaderを呼び出して正常処理させることを目標に進めてみようと思います。 みんな最初は素人なんだからもう少し優しくしてやれよ
Orableはマニュアルが間違ってること多々あるんだし
試してみないことには分からないこともよくある 間違ってることが多々あるのと、見ないのとではかなり違う >>92
勘違いにも気づかせてもらい、十分優しく対応して頂けていると思っていて感謝してます_(._.)_
AP開発側にこのような経験ある人はなかなかいなかったり、インフラ側に聞いてもAP実装レベルの話は知らん、という感じだったりで身近に聞ける人がいないのでとても助かってます。
>>93
パット見読みやすい方に逃げている?状態なので、少しずつマニュアルとお友達になっていけるようにします! Oracle用語で Google 検索したときに、公式マニュアルの結果が上位に来ないことも問題。
この辺はOracleの努力が足りないと言わざるを得ない。 バックアップ・リカバリとかの運用設計はインフラ担当がやるのが普通かもしれんが
テーブルをどういう風にパーティショニングすべきかみたいなDB設計は
アプリケーション開発者がやるのが普通だと思ってるんだがそうでもないのかな? >>95
そもそもOTNの所から探せってスタンスだしね 今回はうちの関係者がインフラにいてやりとりできますが、AP開発側とインフラは完全に分かれていてどんな人がインフラやっているかわからなかった時もざらにあります。
現状は・・・インフラ側:こっちが考えた環境設計に文句あんの?AP側:AP作るだけで精一杯だし、APはデプロイとDBにデータ突っ込むだけで良いでしょ?が多いかなと思っていますが、皆さまのところはいかがでしょう?笑
でもOracleは自由度が高いからAPももっと理解して使ってよっていう考えが出てくるのかなとも思ってます。Oracle現場は今回はじめてなもので(^^; SQLLoaderで主キー違いで並列実行すればいいのに。外部表でファイルのめめまテーブルのように見える機能もある。 アプリのことをAPと略す会社からは
プログラマーのことをPGと略す会社と同じブラック臭がする
(あくまで個人の感想です) >>92
素人じゃないだろ。それでメシ食ってるぽいじゃねーか。技術者募集!未経験者歓迎!じゃねーんだぞ。
オラクルのマニュアルが間違っていた場合に発生したトラブルと
シフトザオラクルを参考にして発生したトラブルは意味合いが全然違う。
趣味でプログラムやってるだけなら文句は言わんが仕事でやるなら迷惑です。 マニュアルが間違ってることがあるんなら
まず初心者に優しくすべきなのはOracle社だろ それじゃトレーニングやサポートで金取れなくなるだろ? OTN見ると無料講習あるみたいですけど、行ったことある方いますか?
初心者なら行っといて損はない!って感じの内容なのでしょうか。行っても半分は宣伝みたいになるなら行かなくて良いかなと思ってしまいます。
こういうとこの講習って平気で平日の昼間やるから中々行けないですけど。。 >>101
君が開発者やDBAとしてメシ食ってたとしても
初めてNeo4jやHBase扱うことになったらそれについては素人だろ?
他人をバカにする前にアプローチの仕方を教えてやれよ 他のDBに比べるとオラクルのマニュアル類は不親切だよな
普通ならData Loadingしたい場合そういう選択肢があるかと
それらのメリット・デメリットや制限について比較説明してるのがすぐ見つかる
オラクルでもそういうのがあるにはあるんだけど見つけにくい 多機能過ぎるししゃーない
MOSドキュメントの方が正確性あるしな >>106
はあ?
それは公式マニュアルじゃないものを公式マニュアルだと勘違いしてないか? OTNに昔みたいなまともなシスオペと活気があればいいのにな
そしたらOracleAceみたいな連中がよろこんでレスしてくれたろうに >>105
俺が今までやったことがない案件をやる時はキチンと勉強してるよ。
そういう時間も納期の見積もりに入れるしな。
簡単な学習用環境くらいは自宅に用意する。
2ちゃんに質問とかはしないし答える側だからな。
俺はちゃんとやってるヤツには教えるつもりはあるけど、あまりに程度が低いヤツに教えることは向いてないから迷惑かける前に誰でもできるコンビニの仕事とかでもした方がいいよって思うね。
それでも何も言われないよりは言われた方が何かしら得るものがあるとは思うがね。
これはバカにしてるとかそういう程度の低い話ではないぞ。 UbuntuLinux16.04にOracle11gExpressを入れているんですが、パソコンを起動する度にOracleも自動起動してしまうのですが、Windowsのサービスみたいに自動起動をオフにできませんか・・?
ググッているんですが、どうしてもやり方が複雑で・・・
よろしくお願いします。 >>111
ウブンツ知らんが、/etc/oratabのYって書いてるところをNに変えろ。
ダメならまたこい。 >>111
sudo sysv-rc-conf oracle-xe off
↑またはこれをコマンドラインから打て。 >>111
それはOracle Databaseの問題ではなく、Linuxの話だろうに。 オラクルって古いんですね
IBMのDB2、ふじつのAIM、NEC
のRIQSとかと同じRDBなんですか? >>115
だがLinuxのマニュアルには載ってはいないな 一言で終わるし。こいつは学生かなんかだろ。
教えてやってよし。
仕事でやることはてめぇの仕事なんだからちゃんと自分でマニュアル読めってことだぞ。
113か、114でまあできただろ。 >>116
同じものかどうかと言えば違うだろうが、リレーショナルデータベースかどうかで言ったらそうなんじゃないか? お世話になっております。SQLLOADERについて質問させてください。
SQLLOADERでデータ登録しようとしているテーブルのカラム数が動的に変わります。Java側で登録したいテーブルカラム一覧と全データ内容はもっていますので、それを元にctlファイルとcsvファイルを動的に生成して読み込ませようと思ってます。
それだとこんな懸念があるんじゃ?こんなやり方もあるよ!などありましたらアドバイス頂きたいですm(_ _)m 皆様、お礼が遅れて大変申し訳ございませんでした。データベース板はいつも過疎っていて、
回答なんかそう早くこないだろうとたかをくくっていて、質問したのも忘れて外出してしまい、
先ほど、質問したのを思い出しました。。
>>112
いえ、3日ほど短時間ですが、ググッて調べてみました。
>>113
ありがとうございます。それは、Nになってます。ありがとうございました。
>>114
超ありがとうございます。それでいけました。そういうのを待っていました。
Windowsのサービスみたいな感じですごくいい感じです。
>>115
私もそう思い、Linux板で聞こうかと思ったんですが、ググったところシェルスクリプトで
制御する方法ばかり出てきたので、Linux板で聞くとそういう回答ばかりになるかな〜と思って
こちらで聞いてみました。 >>117
ありがとうございました。Ubuntuでは、sysv-rc-confっていうのを使うんですね。
ググってみて、chkconfigまではやってみたんですが、何も反応ないから、
どうなってるんだろう?と思っていました。sysv-rc-confでググったところ、
色々.rcスクリプトの書き方とか出てきて、すごい勉強になりました。
ちょうどLinuxのそういう情報も手に入れたかったので、すごい良かったです。
>>119
すみません・・。無職です・・。しかも、40歳です。以前、一度プログラマになったんですが、
とても無理でやめました。しかし、趣味半分で今も触っています。もう17年くらい触っています。
本物のプログラマて、>>117みたいな英語のマニュアル読むんですね・・・。俺じゃできないわけだ・・・。
こんなもん、務まるわけがない・・。ちなみに、私が勤めていたところは高卒PGでも採用されるようなところです。という、大卒がいない。。
皆々さま、大変たくさんの回答をいただき、まことにありがとうございました。 >>122
そうかググってたか、それはすまなんだ
最近のLinuxならsysvじゃなくsystemctlを使うといいよ >>124
レッドハット系でしょ?それ。
でびあん系はsysv----でchkconfigもsystemctlもなかったのでは? >>126
なるほど、v15くらいから採用されてんのね。 RMANにUNTIL CANCELが無いのは何故なの? >>128
基本は自動化させる事が目的だからな。
until cancel無くても、時間指定のポイントインタイムリカバリーで対応出来るし。 >>125
OracleはDebian系ではほとんどまともに動かないし。 DBA_USERSを見たらSYSにもDEFAULTプロファイルが設定されてるんだけど、
SYSもパスワードロックが掛かったりするの?
そうだとしたら、OS認証も許可してない環境の場合、どうやって解除すればいいの? >>131
どうしようもなさそう。
大体はosユーザーで入るとか他の権限あるユーザに頼むしかないよね。
そうじゃなかったら、パスワードとかセキュリティ機能の意味ないからね。 1985年から勉強していないDBを勉強しようっとw エリソンもいよいよ焼きが回ってきたようだ
「全自動DBだ」とEllison CTO、米Oracleが「Oracle DB 18c」を発表
h ttp://itpro.nikkeibp.co.jp/atcl/news/17/100202373/ オラクルは総合4位で、性能・機能および信頼性で他より勝っているが、コストおよびサポートが最低。
データベースの満足度1位はIBM、オラクルは「コスト」で苦戦
h ttp://itpro.nikkeibp.co.jp/atcl/column/17/091500382/092000020/
首位は前回と同じく日本IBM。「信頼性」「コスト」「サポート」が全社平均を5ポイント以上上回った。
2位の日本マイクロソフトは「運用性」と「コスト」が、3位の富士通は「サポート」がそれぞれ部門最高だった。 IBMと富士通の有効回答数の桁違いの低さがシェアと一致してるんだろうな DB2なんかはIBM iの信頼性あっての評価だろうな オラクル使用ユーザー、ものすごく増えてきているね
小さいところも入れだした SQL ServerのLinux版が安定してるようだと
またOracleの新規ユーザーは減るだろうね〜 全自動DBAをまともに動かすための職業が生まれます。 ■ このスレッドは過去ログ倉庫に格納されています