読者です 読者をやめる 読者になる 読者になる

理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

PostgreSQLの論理バックアップ時に使用するpg_dumpの基本的な使い方

pd_dump は、PostgreSQL のデータバックアップを取得するためのコマンドラインツールです。 どういう形でバックアップするのかは、まずは実例を見て頂けるとわかりやすい。 $ pg_dump -h 127.0.0.1 -U postgres dvdrental | less -- -- PostgreSQL database …

PostgreSQLのサンプルデータを簡単につくる

PostgreSQL で遊ぶときのテストデータを簡単につくりましょうという話です。 PostgreSQL にはDocker 公式のイメージがあるので、それを立ち上げればまずは PostgreSQL 環境はできあがりです。 $ docker run --name postgres -d -p 5432:5432 postgres:9.6.1 …

GitbucketのDBからレビュー指摘を抽出する

GitBucket 上で Pull Req とかやりとりしているんだけど、いろいろと評価をするために、これらのレビュー情報を定量化する必要に駆られました。 こういうのを手で数えたりしていると日が暮れるし、何が生産性だ腹を切って死ねということになる。GitBucket で…

DBUnit から "Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database" と怒られたあなたへ贈るメッセージ

あなたへ贈るメッセージ このFAQを読めや!!!!! 背景 DBUnit を使ったテストをしていてふとログを見てみると、以下のような WARN ログが出力されることがあります。 [main] WARN org.dbunit.dataset.AbstractTableMetaData - Potential problem found: T…

DBUnit でカラム値の比較をカスタマイズする

DBUnit の思想について - 理系学生日記 の記事の続きです。DBUnit では、基本的にデータセット単位、あるいはテーブル単位で比較するので、このカラムの値がこういうときにはテストを OK としたい、というようなカラム値単位でのテスト制御を行うためにはち…

DBUnit の思想について

DBUnit というと、JUnit 徹底入門だったり、現場で使える Java ライブラリだったりで紹介されていることからも分かるように、それなりにユーザベースも広く、"DB 関連のテストをするにあたってそういうライブラリがある" という認識はわりと多くの方が持たれ…

MHA (mysql-master-ha) Manager の信頼性

MHA を検証する、という話で最初に「どうしよう」と思ったのは MHA Manager をどこに置き、どう信頼性を確保するか、という点だった。 MHA Manager 自身は、MySQL のサービスには一切介在しないので、MHA Manager が例え落ちていたところでサービス影響はな…

mysql-master-ha (MHA) まとめ

諸々の事情により MHA を検証・導入しようという流れがあり、イマイチまだ全体像が見えていないのでまとめてみた。 MHA とは MySQL のマスタを failover させスレーブをマスタに昇格させるという面倒な作業を短時間(10-30 秒と言われている)で行わせることを…

Query Transformation と OR-expansion

db

もろもろ悲しい目にあったので、もろもろまとめないといけないという使命感に駆られています。 Oracle Database に限らず DBMS というのは、SQL をいかに速く実行したろかと粘着しまくるようにできていて、アクセスパス解析だったりを駆使しまくります。その…

Oracle Silver DBA11g

取った。 ご褒美にシュタゲの一挙放送見ることができたから、全体としては有意義な一日でした。

Oracle Silver

なんか 1 週間で Oracle Silver 取らざるを得ない状況になってきたので大変に精神的によろしくなくなった。 資格試験、最近は特に意味ないと思ってるのだけど、今回ばっかりはぼくが悪い状況を作ったのでなんとかしたい。 とりあえず、黒本と呼ばれる教本お…

SQLアンチパターン

読んだ。SQLアンチパターン作者: Bill Karwin,和田卓人(監訳),和田省二(監訳),児島修出版社/メーカー: オライリージャパン発売日: 2013/01/26メディア: 大型本購入: 9人 クリック: 698回この商品を含むブログ (40件) を見るタイトルに珍しい感じの題がつけら…

AskTom の Tom

db

Oracle の仕組みマジメに調べてたらよく Ask Tom っていうサイトが引っ掛かる。 Ask Tom Home謎のQAサイトここの Q&A を読み込むと分かるんだけど、Answer してる Tom、異常に Oracle の内部構造に詳しい。 一方で、Q&A と言ったら「教えて!goo」とか「Yaho…

Oracle における共有プール分割について

db

導入 Oralce の SGA には共有プールの領域がある。共有プールと言っても、実態はメモリ領域であり、その中には色んな要素が格納される。親・子カーソルはその一例だし、SQL Text や、オブジェクトの情報、PL/SQL の情報など、本当に多岐に渡る。 ポイントは …

同時接続数を増加させる際のメモリ見積り方法

db

Oracle に同時接続できるユーザプロセス数の最大数は processes という初期化パラメータによって制御されるのだけれど、これを増やす段になって気をつけないとならないのが「増やすことによる弊害」だと思う。 processes を増やすということは、DB サーバか…

ヒストグラム統計と bind peek と CURSOR_SHARING について

db

このエントリでは、Oracle DB についての挙動理解の整理をしたいとおもいます。 ヒストグラム統計 SQL の実行計画を作成するのはオプティマイザであるわけですが、Oracle のオプティマイザが実行計画を立てるとき、基本的には列値は一様分布に従うという仮定…

シーケンスオブジェクトの現在値を変更する方法

db

Oracle にはシーケンスオブジェクトというものがあって、これを使えばシステムグローバルなシーケンス値が取得できます。 順序疑似列 この値を使って主キーを生成するとかよくあるパターンですね。 select sequence_name.nextval from dual; -- これを連続で…

SQL にはバインド変数をちゃんと使いましょうという話

db

先に断っておくと、Oracle ベースの話。 SQL インジェクション云々の問題を除いても、実行する SQL にはバインド変数を使うのが正しい、という命題は OLTP に限っていえばほぼ真と言って良いと思う。ここで "限って"という限定を用いているのは、一部にはバ…

Oracle の統計情報更新ジョブの起動時刻を移動させる

db

Oracle は 10 g 以降、基本的には CBO (Cost Base Optimizer) で実行計画を定めるようになる。では、何を基準としてコストを図るのかというとそれは統計情報で、Oracle のデフォルトだと、統計情報収集ジョブが日夜統計情報を収集・更新するという動作になっ…

Cassandra に対する Java からの Insert

ここで Java を使うのは諸事情のためなのだけど、Cassandra に対するアクセスは Thrift 経由となる。じゃぁ Thrift って何よというと、公式では以下のように説明されている。 Thrift is a software framework for scalable cross-language services developm…

Cassandra 入門

db

諸事情で Cassandra で遊ぶことになった。 Cassandra とは何なのか 一言で言えば、非中央集権型で単一故障点のない(という触れ込みの)、カラム指向分散データベースといったところだと思う。Facebook によって作成され、今は Apache のトッププロジェクトに…

同じ問合せブロックが複数出現するときは with 句 使えばいいのでは

db

1 つの SQL に同じ問い合わせブロックが何度も何度も出現するときは、それを出現回数分 DBMS に検索させるのマジでムダだしパフォーマンス悪くなるから、with 文で一時的なビューを作るようにした方がいいです。 以下は、Oracle の公式ドキュメントに記載さ…

逆キー索引についてのまとめ

db

時刻をキーとしているログテーブルを insert するロジックを組んでいるケースで、このログテーブルにバースト的な insert が走ると、パフォーマンスが悪化するという事象が散見されました。 調査した結果、インデックス競合によって後段の insert が待ちにな…

SQL クックブック

猛烈に忙しかった仕事も若干落ち着いてきて、久しぶりに土日はゆっくり休養することができたので、積んでたこの本を読んだりしました。SQLクックブック ―データベースエキスパートのための実践レシピ集作者: Anthony Molinaro,木下哲也,有限会社福龍興業出版…

Oracle でのページング

db

RMI でスレッド起動されるロジックにおいて、数十万程度の処理対象レコードを DB から一度に読みこむ形でプログラムを実装してたのだけれど、あんまり RMI が呼ばれすぎるとメモリが枯渇してヤベーみたいな話になったので、ページングさせて小分けに処理する…

sqlite でテーブルの主キーを変更する方法は?

db

CDTV のランキングデータを DB に突っ込むバッチ的プログラムを走らせておりましたところ、主キー制約違反でバッチが死にました。 元凶は 2010/08/07 付のランキングで、92 位がなぜか 2 つある。 ランキング用テーブルの主キーは日付 + 順位だったので、同…

SQL 実行の高速化

SQL を実行する際は、SQL 実行用のバッファが確保された後、解析処理が行われる。解析にはハード解析とソフト解析があり、解析済みの SQL に対しては負荷の低いソフト解析が用いられる。両者の大きな違いは、ハード解析ではオブジェクトの定義チェック、オブ…

RAC

RAC (Oracle Real Application Clusters) は Shared Disk、Active/Active 構成のクラスタ。構成するには 2 台以上のノード、アプリケーションとの通信用のパブリック、ノード間通信用のプライベート(インターコネクト)、共有ディスクが必要。RAC 上の各イン…

相関サブクエリって FROM 句には使えないんですね

db

相関サブクエリというと、内部クエリから外部クエリのテーブル(カラム)を参照するってヤツで、みなさん毎日相関サブクエリのことばかり考えていらっしゃることでしょうけど、そういうのキモいかもしれないからよくかんがえたほうがいいです。 ちなみにですけ…

Oracle の実行計画が振れてしまう

db

数百万レコードを含むテーブルをいくつか JOIN する SELECT 文が数十分かかっても返ってこないという事象が時々発生する。bind 変数の値以外は同じ SQL を流しても、遅いときと早いときがあり、ちょっとした問題になる。 実行計画を見る限りでは、遅いときと…

MySQL (Mac) の README に書かれていること

db

MySQL の Mac 用バイナリをインストールしたのですが、README に書いてあることを忘れそうだったので、ここにメモしておきます。 全文訳しているわけではなく、必要かもしれないと思ったところだけなので。 インストール場所 インストールされるのは、/usr/l…