emkiki RubyやJavaのめも

37歳で汎用機系(AS400)→Javaへ転職したRuby好きのめも

絵で見てわかるOracleの仕組み メモ(追記中)

AS400使っていた時、わたしはSQL文そのものを書くことはほぼなかった

Queryツール的なのがあったので。
AS400 WRKQRY - Google 検索

そんなわけで、SQL文を普通に使う現場だと馴染みのない言葉が出てくるけど、似たような事はやってきたはずだから、聞きなれない言葉に出会っても落ち着こう。

  • union all ... CPYF *NOCHK みたいなもんか。
  • between ... RANGE のことか。
  • in ... LIST のことか。
  • カーソル ... イテレータ的なことか。

絵で見てわかるOracleの仕組み 読書メモ

Oracleを理解するためのキーワード

  • 並列処理を可能にし、高スループットも実現
  • レスポンスを重視(サービスプロセスとバックグラウンドプロセス)
  • COMMITされたデータは守る(REDOログ)

I/Oとディスクの関係

  • ディスクが回転している、ヘッドが動く、をイメージする
  • ある程度のデータ量を読みたいのならランダムアクセスはシーケンシャルアクセスに劣る。だけど実際にはキャッシュにデータが載っていることもあるけど。
  • Oracle倉庫業者にたとえる
  • お客さんの預けた荷物をとりま最優先でお返しするのがサービスプロセス
  • それ以外はバックグラウンドプロセス
  • いちいち書き込んでたらレスポンスが悪くなってしまうから、データベースライターというバックグラウンドプロセスがしばらくしたらファイルにキャッシュの内容を書き込む。レスポンスを重視。

キャッシュと共有メモリ

  • 作業場(バッファキャッシュ)に置いてたら早く返せるので、いかにディスクI/Oを減らすかってこと。
  • 広い視野で考える。OSバッファキャッシュにデータが残っていたら、Oracleは再起動したのに高速に処理が終わることも。
  • 共有メモリは、実際のメモリはひとつ。各プロセス例えばa,b,cが共有メモリをそれぞれ100MB所有しているように見えるけど実際は100MBしか使ってない。

SQL文解析と共有プール

  • パース結果もキャッシュにあればラッキーなのである。

起動と停止

  • 状態
    • SHUTDOWN
    • NOMOUNT バックグラウンドプロセス群+共有メモリが存在する状態
    • MOUNT
    • OPEN
  • Oracle の管理単位としてのインスタンスとはJavaでいう実体とかオブジェクトのことではなくバックグラウンドプロセス群+共有メモリのことです。

接続とサーバープロセスの生成

  • アドレスとポート番号でソケット(電話のイメージ)は識別できる
  • リスナー...連絡が来るのを待っているプロセス。listenすべきポート番号などはlistener.oraから取得(リスナー設定ファイル)orデータベースからの自動登録
  • 接続を試みるプロセスは業務アプリケーション
  • 接続に必要な情報をOracleクライアントに渡す。通常はtnsnames.oraに接続記述子(その情報のこと)を載せ、接続識別子(短縮名)を付ける。
  • リスナーがそのままSQL処理を行うとかかりっきりになっちゃうのでサーバープロセスを生成して処理を引き継ぐ。
  • なのでリスナーを停止させても既存コネクションには何の影響もなくSQLの処理も行われる。
  • サーバープロセスの生成は激重なので、物理接続と切断を繰り返すようなアプリケーションを作らないように注意。
  • サーバープロセスをいくつかプールしておいて多数のアプリケーションが自分の使いたいときだけ、プールの中から一つ使うというアーキテクチャがあってコネクションプールと呼ばれるものがある。

Oracleのデータ構造

  • まとまり単位でうまいことやってる。
  • 表領域>セグメント>エクステント>Oracleブロック

サクラエディタ 使い方メモ

vimmerを目指していたのですが与えられた環境でもパフォーマンスよくしたいのでサクラエディタの使い方をメモメモ。ちなみに前は現場ではNotepad++を使っていた。それはそれで便利であった。正規表現を使った置換など。

  • まず、設定->タイプ別設定一覧 にて、制御文字の表示色や折り返しの設定が出来るので、自分が見やすいよう出来ます。自分は初期設定だとコードを見る時はいいけどメモ書くときはちょっと色合いが強すぎると思ったので調整した。
  • 検索をすると全部のキーワードに色がつくのでマウスでザーッと流し見が便利。
  • 検索語を一個ずつ追ってく(vimだとn)のはF3です。逆方向はシフトF3です。
  • 画面分割はF4で、縦分割はシフトF4です。
  • 行のカットはCtrl+e
  • 矩形選択はAltを押しながら選択

簡単ですがこんなところで。

PostgreSQL インストールと使い方 Windows10 home

OracleDB、PL/SQLの勉強をしたかったのじゃが、Windows home だとダメっぽいので、PL/pgSQLというのがあるみたいだし大体同じやろと思い、PostgreSQLを入れる。
MacBookproあるからそっちに入れても良かったんだけど、サクラエディタとかに慣れておきたいのでWindowsを使う。

インストールはごく簡単なので以下を参考に。
blog.codecamp.jp

使い方メモを以下に。
こちらは参考サイトです。
www.dbonline.jp

  • 最初にサービスを実行する(Windows)
  • ちなみに、pgAdmin4 というのが入ってて見やすい。
  • 接続
psql -U postgres
  • 切断
\q
  • 実行は最後にセミコロン
postgres=# select version();
                          version
------------------------------------------------------------
 PostgreSQL 10.1, compiled by Visual C++ build 1800, 64-bit
(1 row)
  • セミコロンまでは見た目上、改行しても大丈夫
postgres=# select
postgres-# version()
postgres-# ;
                          version
------------------------------------------------------------
 PostgreSQL 10.1, compiled by Visual C++ build 1800, 64-bit
(1 row)
  • データベース一覧
\l
  • データベース作成
postgres=# create database hogedb;
CREATE DATABASE
  • 現在のユーザーの確認
\du
  • ユーザー追加
postgres=# create user hoge;
CREATE ROLE
  • 現在登録されているロールの確認
postgres=# select rolname from pg_roles;