ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

PostgreSQLの実行計画を読み解くための参考資料集

はじめに

PostgreSQLは商用DBに比べて書籍が少なく、まとまった情報が入手しにくいです。また、有志の方がPostgreSQLに関する資料を公開していますが、散在しており、せっかくの有益な情報にアクセスしにくい状況にあります。

そこで、本エントリではPostgreSQLの実行計画に焦点を絞り、公開されている有用な資料(書籍含む)をまとめました。読み返したい資料を探しやすくするため、内容のポイントも併せて紹介してます。

本エントリをきっかけに、これらの資料がさらに活用されることを願っています。

前提

各資料の前提としているPostgreSQLのバージョンは異なることにご注意ください。調査対象のPostgreSQLのバージョンが異なれば、状況は変わっているかもしれません。

各資料には内容の重複があり、ほぼ同一内容の場合もあります。重複している内容についてはポイントから割愛することがあります。

資料を読み進めるのにお勧めの順で並べています。このため、シリーズ物の資料でも順序が入れ替わることがあります。

実行計画の解説資料

公式ドキュメント

https://www.postgresql.jp/document/9.6/html/

最新で信頼できる一番のドキュメントは公式ドキュメントです。他の資料を読む前に、まずは該当バージョンの関連章に目を通すことをお勧めします。

上記リンク先は PostgreSQL 9.6 ですが、右上の「他のバージョンの文章」から過去バージョンのページへ移動できます。

実行計画と特に関連の深い章を以下に挙げます。

EXPLAIN
EXPLAIN コマンドと利用可能なオプションの説明があります。

第14章 性能に関するヒント
実行計画の読み解き方とチューニングのヒントがまとめられています。
実行計画を理解する上で、この章はとても重要です。途中で理解できないことがあっても、まずは一通り目を通すことをお勧めします。この後に紹介する資料を読み込んでから改めて本章を読むと、新たな発見があるかもしれません。

67.1. 行数推定の例
プランナの行数推定について説明しています。行数の推定と実際に差があるとき、なぜそのような差が生まれるのかを理解するために、本章の解説が重要となります。

  • テーブル全体の行数推定
  • 度数分布と頻出値(MCV)を用いた選択度の決定
  • 複数の条件を組み合わせた選択度
  • 結合の行数推定

第11章 インデックス
実行計画で適切なインデックスが選択されているかを判断するために、PostgreSQLではどのようなインデックスがあり、それがどのような条件で適用されるかを理解しておきましょう。

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~

実行計画のコスト計算を中心に、わかりやすくまとめています。
資料のデザインはシンプルで、とても読みやすいです。

  • クエリ実行の概要
  • 実行計画の具体的な読み方
  • プラン演算子の説明とコスト計算式
  • 実行プランのヒント機能

PostgreSQL:行数推定を読み解く

PostgreSQLのマニュアルに記載されている行数推定のアルゴリズムをわかりやすく解説しなおしています。
また、複合条件で行数推定が大幅にずれることのある理由を、条件の独立性の観点から説明しています。PostgreSQLマニュアルにも「プランナは2つの条件が独立していると仮定」と記載していますが(67.1. 行数推定の例)、それが何を示すのかをより明確にしています。

  • 行数推定のアルゴリズム
  • 複合条件の独立性に基づく行数推定と実際の乖離

Explaining EXPLAIN 第2回

https://www.postgresql.jp/sites/default/files/2016-12/Explain%E8%AA%AC%E6%98%8E%E8%B3%87%E6%96%99%EF%BC%88%E7%AC%AC20%E5%9B%9E%E3%81%97%E3%81%8F%E3%81%BF%E5%8B%89%E5%BC%B7%E4%BC%9A%EF%BC%89.pdf

プラン演算子の処理及びコスト計算を詳しく説明しています。

  • プラン演算子
    • 処理概説
    • コスト計算
  • work_mem と lossy storage モード
  • 実行プランの強制

本資料で取り上げられているプラン演算子の一覧表を抜粋します。

演算子 関連処理
Seq Scan 表スキャン
Index Scan 索引スキャン
Bitmap Index Scan 索引スキャン
Bitmap Heap Scan 索引スキャン
Subquery Scan 副問合せ
Tid Scan ctid = ...
Function Scan 関数スキャン
Nested Loop 結合
Merge Join 結合
Hash Join 結合
Sort ORDER BY
Hash
Result 関数スキャン
Unique DISTINCT, UNION
Limit LIMIT, OFFSET
Aggregate count, sum, avg, stddev
Group GROUP BY
Append UNION
Materialize 副問合せ
SetOp INTERCECT, EXCEPT

問合せ最適化インサイド

少し古い資料(2006年)となりますが、プランナの動作をコンパクトかつわかりやすくまとめています。

  • Executor概要
  • Planner
    • 前処理
      • 式の簡略化
      • 式の事前評価
      • 関数出力の安定性
    • パス探索
    • 後処理
      • パスの選択と実行計画への変換
  • 最適化
    • 情報
      • 統計情報 (Statistics)
      • 選択度 (Selectivity)

PostgreSQL実行計画のハッシュノードに出力されるバケット数とバッチ数の解説

http://taityo-diary.hatenablog.jp/entry/2017/05/29/055949

PostgreSQLの実行計画のハッシュノード(Hash)に出力されるバケット数(Buckets)とバッチ数(Batches)について、解説を行っています。

データベースパフォーマンスアップの教科書 基本原理編

データベースパフォーマンスアップの教科書 基本原理編

データベースパフォーマンスアップの教科書 基本原理編

DB(この本ではPostgreSQLに限定していません)がどのように処理を行うかを解説しています。処理の中身を理解することで、実行計画のコスト計算式の背景を理解したり、実行計画の妥当性を判断したりできるようになります。

使ってみませんか?pg_hint_plan

PostgreSQLでHINT句を使えるようにする外部モジュール(pg_hint_plan)の紹介です。外部モジュールのため、本番環境で導入するハードルは高いかもしれませんが、調査及び検討してみてはいかがでしょうか。

pg_hint_plan プロジェクトページは以下にあります。
https://ja.osdn.net/projects/pghintplan/

pg_hint_plan 1.1.0 ドキュメントはwebで公開されています。
http://pghintplan.osdn.jp/pg_hint_plan-ja.html
なお、1.2 のドキュメントはモジュールのパッケージ内に含まれています。

より深く知るオプティマイザとそのチューニング

オプティマイザをコスト計算式(コストモデル)の観点から説明しています。
数式が多めなため、苦手な方は他の資料を優先して確認するとよいかもしれません。

Explaining Explain ~ PostgreSQLの実行計画を読む ~

http://lets.postgresql.jp/documents/technical/query_tuning/explaining_explain_ja.pdf/view

"Explaining Explain"シリーズ(全3回)の1回目に当たります。
他資料と内容の重複が多いため、知識の整理を兼ねて読んでみてはいかがでしょうか。

Explaining Explain 第3回

https://www.postgresql.jp/sites/default/files/2016-12/Explaining_Explain_3.PDF

第1回及び第2回の資料をベースに、実行計画のサンプルを用いて説明しています。

PostgreSQLの実行計画を読み解こう -PostgreSQL SQLチューニング入門-

https://www.slideshare.net/satoshiyamada71697/postgresql-45223468

他資料と内容の重複が多いため、知識の整理を兼ねて読んでみてはいかがでしょうか。

全般的な解説資料

実行計画に特化していませんが、章を割いて解説していたり、参考になる情報が掲載されている資料を紹介します。

PostgreSQL Internals (1) PostgreSQL 9.6 対応版

http://h50146.www5.hpe.com/products/software/oe/linux/mainstream/support/lcc/pdf/PostgreSQL_Internals_1_for_PostgreSQL96_ja_20170211-1.pdf

通称「篠田の虎の巻」の一つ、"PostgreSQL Internals (1) PostgreSQL 9.6 対応版"です。PostgreSQLの内部構造について、マニュアルに記載のない動作に関する情報も含めてまとめられています。実行計画についても触れられており、最新の情報が反映されています。

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 Software Design plus

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

PostgreSQL 9.3 をベースに、基本編・設計/計画編・運用編・チューニング編に分けて解説しています。この内1章を実行計画に割いて解説しています。

SQLパフォーマンス詳解

http://use-the-index-luke.com/ja

SQLのインデックスとチューニングについて、ベンダ毎(もちろん、PostgreSQLも含まれます)に解説を行っています。

SQLパフォーマンス詳解」にはweb版と書籍版があり、上記リンク先はweb版となります。書籍版を購入の際は以下のエントリも参照ください。
「SQLパフォーマンス詳解」(原文タイトル:SQL Performance Explained)の紹介と購入時のポイント - ぱと隊長日誌

PostgreSQL Wiki 日本語版

https://wiki.postgresql.org/wiki/Main_Page/ja

英語圏のコミュニティによって作成されたPostgreSQLの記事を和訳で読むことができます。

Let's Postgres

http://lets.postgresql.jp/

PostgreSQL全般の記事がまとめられています。

男性が婚活する際の心構え・アドバイス

はじめに

もう2年以上前になりますが、婚活をしていた時期がありました。離婚歴あり・別居の子供ありでのスタートでした。婚活で知り合った方とお付き合いしていた期間も含めれば、2年半以上活動していたことになります。イベント参加回数は50回以上、紹介なども含めて実際にお会いした方の延べ人数は300人を超えます。最終的には結婚に至り、婚活を卒業することになりました。

その過程で学んだことは多く、今の自分がいるのはそこでの経験があるからといえます。

この経験をまとめ、公開することにはためらいがあり、長らく原稿のまま放置してきました。ですが、時を経て、自分の経験が誰かの婚活のサポートになればという思いが勝るようになり、ここに公開することにしました。

今回のまとめは男性視点となります。「相手」との表記は女性を指します。
また、内容は心構えや準備が中心となっています。テクニックの話はあまり触れていません。婚活をするための土台をしっかりと整えることが最も大切だと考えたからです。

長文となりましたので、目次もご利用ください。

心構え

婚活を軽い気持ちで始めると後悔します。まずは自分自身と真剣に向き合ってみてください。

「普通の恋愛」と婚活のプロセスは一緒

普通の恋愛、と言われて想像するプロセスはこんな感じではないでしょうか。

  • 出会う。
  • お互いを知る。
    • ここより先に進まず、最初に戻る場合もある。
  • 恋愛感情を持つ。
  • 付き合う(交際する)。
  • 結婚を意識する。
    • ここでお別れして最初に戻る方もいれば、恋人の関係を続ける方もいる。
  • 結婚する。

婚活であってもこのプロセスは変わりません。ただ、以下の点で差異があります。

  • お互いが最初から結婚を意識している
  • 出会う~付き合うまでのプロセスが短期間に繰り返される

婚活は出会いのチャンスを増やす手段

婚活の手段には結婚相談所・イベント・WEBサイト・アプリなど様々ありますが、それで達成できるのは結婚を前提とした相手と出会うチャンスを増やすということです。出会いだけであれば学校や職場でもあるはずです。婚活が違うのは、双方の目的が明確で、出会いのチャンスが非常に多いという点です。そこで出会った後は通常の恋愛とあまり変わりません。スピーディに行くこともあれば、ゆっくりと進むことだってあります。

「交際」の定義

私が経験した範囲での話になりますが、婚活ビジネス(結婚相談所や出会いの場を提供しているサイト・アプリなど)での「交際」の定義はかなり緩いものでした。顔合わせして、ちょっとでもいいな、また会ってみようかな、と互いに思ったら「交際スタート」といった具合です。また、交際は複数人と同時にできます。これはあなたがイメージしている「交際」より、かなり緩いものではないでしょうか。

そこで注意が必要なのは、交際数や交際率といった数字に惑わされないことです。これらは緩い定義の「交際」に基づいた数字かもしれません。もし活動を始めてみて、その数字通りの成果が出せたならそれはとても素晴らしいことです(うらやましい!)。ですが、定義の違いによるギャップがあるかもしれないということを、頭の片隅に入れておいてください。

なお、お互いが本命を相手に決め、他の交際をお断りし、結婚を前提とした交際に発展した状態を「真剣交際」と呼ぶところもあります。おそらく、こちらの方が「交際」と言われてイメージするものに近いのではないでしょうか。

本エントリ内では「交際」を「真剣交際」に相当するお付き合いと定義しています。

婚活は少しでも早く始める

婚活の成功を左右する重要なパラメータとして「年齢」があります。

婚活は体力・気力・お金を使います。これらは想像しているよりも、はるかに使うことになります。体力・気力のある若いうちに婚活に取り組むべきです。もし、婚活に疲れ切ってお休み(中断)することにした場合でも、再開時点の年齢を若くできる可能性もあります。

また、年齢が上がるほど女性側の希望年齢とのミスマッチが増えていきます。あなたが女性の年齢を気にするとの同じように、女性もあなたの年齢を気にしています。

本気で婚活したいと思うなら、少しでも早く始めるべきです。

成功率の低さを覚悟する

冒頭で私は300人以上にお会いしたと書きました。では、その中で交際したと言える方はどれだけいたか。実は4人でした。多いとみるか、少ないとみるかは人それぞれでしょう。ですが、紹介時点で相手から断られた(会えなかった)方もカウントするのであれば、交際できた方の割合は1%にも満たないことを申し添えておきます。

そんなに低いのかと驚かれるかもしれません。ですが、学生時代の恋愛を思い出してみてください。出会ってきた異性の同級生や仲間のうち、好意を持ち、交際に至った方の数はどれだけだったでしょうか。それを考えると、この確率は妥当に思えます。

出会いの運によほど恵まれない限り、限りなく断られ、振られます。その覚悟をもって臨んでください。

悲しみや苦しみを覚悟する

断られることも傷つく言葉を投げつけられることもあります。容姿を批判されるようなことだってあります。私の場合、2,3回お会いしてから、「顔が好みじゃない」と言われ、その後お断りされたことがあります。

多くの出会いを繰り返す中で、こうした苦しみを避けることはできません。ですが、忘れないでください。心無い言葉を投げつけられた時、その人はそう思っているかもしれません。でも、他の人までそう思っているわけではないということを。あなたが真摯に自分自身と向き合い、婚活に取り組む限り、あなたを良いと思ってくれる方に出会うチャンスはあります。

変えられない状況を悲観せず、未来に目を向ける

もしかしたら、あなたには離婚歴があったり、子供がいるかもしれせん。でも、状況を悲観しないでください。確かにこれらの状況下ではお断りされる確率がとても高くなります。ですが、それを受け入れてくれる方は必ずいます。

大切なのは自身が過去を受け止め、未来を語れることです。相手が不安に思うのは過去に対してではなく、共に歩む未来です。その不安を取り払い、信頼してもらわなければいけません。そのために、これからどうしていきたいのかを語れることが大切です。

なお、男性の離婚歴を女性は冷静に受け止める方が多いようです。むしろ、離婚歴がある=一度は結婚できたということだし、30歳を過ぎて結婚できていない方よりも安心だ、と考えている方もいます。

同居・別居問わず、子供がいると婚活では不利です。条件だけでフィルタリングされる場合、ほぼ通りません。
ですが、受け入れてくれる方はいます。そんな出会いに少しでもつなげるためには、条件だけでフィルタリングされる出会いを避け、イベントのような直接話す機会のあるものを選んだ方がよいです。会って話すことで、人柄が伝わり、チャンスにつながることがあります。

心に響いた言葉をメモする

婚活はお互いが心の内までさらけ出し、真剣に向き合っていくことになります。その過程では、これからの人生を歩むための大切な言葉に何度も出会うはずです。それらはぜひメモしておいてください。そして、婚活中も、終わってからも、時折見返してみてください。きっとあなたの支えになります。

秘密を守る

婚活を通して、多くの方の人生や考え方に触れることになります。それは極めてプライベートな内容です。ですから、それらは自分の心に秘めてください。間違っても他の方に話したりしないでください。

秘密をばらすかもしれない相手に心を開くことはできません。

なお、本エントリでもこの心構えを貫いています。このエントリは私自身の経験をベースとしています。ですが、他の方のプライベートに関わることは徹底して省きました。それらは例え家族であっても話さない、ましてや他人に話すなどありえない、私はそう考えています。

準備

段取り八分は婚活でも同じです。活動がうまくいかず悩んだときは、ここに立ち返ってみてください。

なぜ結婚したいのか?

婚活に臨む前に、なぜ結婚したいのかをよく考えておくべきです。婚活は苦しいことの連続です。この質問に答えを持っていなければ、心が折れてしまうかもしれません。

ちなみに、離婚歴があって婚活をしていると、よく聞かれるのが「なぜもう一度結婚しようと思ったの?」という質問です。この質問の意図は、過去の結婚・離婚についてどのように考え、これからどうしていきたいのか?ということです。事前に自分の考えをまとめておきましょう。

清潔と清潔感の違い

清潔と清潔感は違います。清潔は衛生、清潔感は印象です。清潔は当たり前。女性は清潔感を見ています。そして、清潔感は作れます。

例えば、初対面をスーツで臨むのであれば、まずはそこから見直しましょう。安いスーツを着ていませんか?オーダーではなく既製品でもよいので、少し奮発してスーツを新調しましょう。良いスーツは仕立てがしっかりしていて、とてもスマートに見せてくれます。そして、女性は感覚的にそんな質感やフィット感を見抜いています。

また、靴もお手入れしましょう。服に合わせた靴を用意するのはもちろんのこと、お手入れも忘れずにしましょう。お手入れは簡単にできますし、どうしても自分でできないのであれば、お店に頼むのもありです。

スーツや靴の選び方、お手入れ方法がわからなければ、店員に聞いてみてください。「どう選べばよいかわからなくて…」と素直に伝えれば、丁寧に教えてくれます。

私の場合、スーツに関しての知識が全くなかったので、この本から基礎知識を学びました。

一流の男の勝てる服 二流の男の負ける服

一流の男の勝てる服 二流の男の負ける服

また、店員さんと何度も相談しました。

靴のお手入れはこちらを参考にしてみてください。
革製品のお手入れ方法 | 靴クリームのコロンブス | 靴磨きや革製品などのケアグッズトップメーカー

髪は美容室でカットしましょう。また、髪をセットする習慣がなければ、普段から練習してみてください。

メガネをかけているのであれば、シャープでスッキリしたフレームとレンズの形を選ぶのがお勧めです。メガネもわずかな違いで印象ががらりと変わります。

知っている店を増やす

出会って間もないころ、まずは食事に誘うことが多いと思います。その際、口コミサイトや記事などを参考にすることもあると思いますが、できれば事前に、一度でよいので実際に訪れて、自分で確かめることをお勧めします。道のわかりやすさ、お店の雰囲気、メニューの品ぞろえ、価格、トイレの清潔さなど、行ってみることで気が付くことは多くあるはずです。

来たことあるの?と聞かれたら、素直に下見したと白状してよいと思います。それで良い印象を持ってもらえることだってあります。

「初めてのお店」に女性を食事に誘わないで | モテる人は「会食」をおろそかにしません | 東洋経済オンライン | 経済ニュースの新基準
ちょっと上から目線のタイトルの記事(と内容)ですが、口コミを鵜呑みにしすぎてはいけないという指摘は参考になります。

ネガティブな質問への答えを用意する

ネガティブなトーンを持った質問を受けることもあります。例えば、「SEって忙しいんでしょ?」といった具合です。

このような頻出する質問については回答を事前によく考えておいてください。そして、それを聞いた相手がどう感じるかをよく考えてください。

例えば、先の質問は定番ネタであると同時に、今後のお付き合いをイメージできるかも気にしています。SEが忙しいのは事実だとしても、どうやってプライベートの時間を確保しているのか伝え、相手がお付き合いをイメージできるようにする必要があります。

相手の希望年齢を上方向へ広げる

男性は相手の希望年齢を年下~せいぜい同年齢に設定することが非常に多いです。自分の場合は上限を+5歳までOKとしていたのですが、それでも珍しいと周囲から驚かれたぐらいです。

この話題で私がなにより思うのは、希望年齢を年下に限定してしまうことで、素敵な出会いのチャンスを逃してしまうのではないか?ということです。

子供が欲しいからと年下の女性を希望するのはわかります。ですが、結婚生活は子供が全てではありません。例え子供が授からなかったとしても、二人でどんな楽しい日々を作っていけるか、それができる相手はどんな方なのか、想像してみてはいかがでしょうか。

出会う・知り合う

出会いを楽しんでください。人生でこれほど多くの方と真剣に向き合える時間は他にありません。

一期一会

どんな出会いであっても一期一会と心得、誠意をもって向き合ってください。

実際にお会いしてみると、期待した印象と異なることが時折あります。そう感じてしまうこと自体は仕方のないことだと思います。でも、その気持ちは心に秘め、絶対に顔や態度に出さないでください。これができていない男性は多いし、相手に失礼です。

例え断るつもりの相手だったとしても、相手が時間を作ってお会いしてくれたことに感謝しましょう。一つ一つの出会いを大切にし、そこから学ぶことで、チャンスが巡ってきたときにつかみとることができます。

スタバよりアフタヌーンティー

初対面でお茶をすることになり、相手の希望で待ち合わせが土地勘の無い場所になったとき、チェーン店は無難な選択になります。表題に挙げたこの二つは、関東圏の大きな駅であれば、どちらもあることが多いため、例に挙げました。

Starbucks Coffee Japan - スターバックス コーヒー ジャパン
Afternoon Tea

初めての顔合わせで選ぶ店のポイントを挙げます。

  • 雰囲気
    • 敷居が高すぎずも低すぎずもせず、かつ気軽に入れるか。
  • 適度な席の間隔と周囲のにぎやかさ
    • 席があまりに近すぎたり、落ち着いた静かな店だと、周りに会話が聞こえないかと気になります。
  • 席数
    • 待つことになっても、席数が多ければ比較的早く案内されます。
  • 完全禁煙
    • 例え分煙でも煙が流れてくるのを嫌がる女性は多いです。
  • 飲み物メニューの幅の広さ
  • 飲み物だけでも頼みやすい
  • 待ち合わせしやすい
  • 路面店より建物内にある店を選ぶ
    • 天候に左右されず、待ち合わせしやすいです。
    • 化粧室が近くにあれば女性が化粧直しなどに便利です。

スタバもアフタヌーンティーも申し分のないお店です。ですが、どちらかを選ぶのであれば、アフタヌーンティーのほうが無難です。
なぜなら、「飲み物メニュー」がポイントになります。飲み物メニューはスタバがコーヒー、アフタヌーンティーは紅茶が中心です。女性で紅茶が苦手という方はあまり聞きませんが、コーヒーを苦手としている方はいます。ですので、好みに関する事前情報がなければ、アフタヌーンティーのほうが無難といえます。
また、アフタヌーンティーは建物内にあることが多いのも、ポイントに挙げられるでしょう。

また、「飲み物だけでも頼みやすい」も重要です。
例えば、ケーキ屋のイートインでお茶だけを頼む人はあまりいないでしょう。ですが、それが初対面であればお茶だけで、となることが多いです。せっかくのお店のアピールポイントに目をつぶり、飲み物だけを頼む気まずさを回避するためにも、気軽に飲み物だけを頼みやすいお店を選んだ方がよいです。

今回挙げたポイントに該当するようなカフェを事前に探しておくとよいでしょう。例えば、マルイシティ池袋の「ア・ラ・カンパーニュ」は今回挙げたポイントに合致したオススメできるカフェでした。
神戸発祥のケーキ・タルト、a la campagne(ア・ラ・カンパーニュ)

口下手だからとネガティブにならない

まず、相手を知ろう、という気持ちで臨むことが大切です。話すより聴くことに重心を置いてください。
聴き方については「プロカウンセラーの聞く技術」が参考になります。

プロカウンセラーの聞く技術

プロカウンセラーの聞く技術

とはいえ、聴くばかりでは会話にならないので、こちらから話すことも必要です。そのための準備をしましょう。例えば、日頃から話すネタを探しておく。日常でちょっとおもしろかったことをメモしておく。相手のプロフィールを読み込んで、キーワードとなりそうなことを軽く調べておく。他の人に話して反応の良かったネタを記録しておく。こうした準備があれば、例え口下手だとしても、より落ち着いて相手と向き合えるはずです。

それでも、相手によってはうまくしゃべれないこともあります。でも、落ち込まないでください。相性はあります。こればかりは会って話してみるまで分かりません。相性の合う方に出会えるまで、くじけないことが大切です。

謙虚と自信の無さは違う

婚活をしているということに対して、どこか負い目や恥ずかしい思いがあるかもしれません。それが自分の対する自信のなさにつながってしまうかもしれません。ですが、その思いは断ち切ってください。

想像してみてください。同じ相手が(a)「こんな何のとりえもない私なんです…」(b)「私は(小さいことかもしれないけど)こんなことが得意なんです」と話すとしたら、どちらが魅力的に感じますか?

謙虚さと自分に自信を持つことは両立できる、と以前のエントリに書きました。
謙虚であれ。前向きであれ。 - ぱと隊長日誌

婚活でお断りが続けば自信を無くすこともあります。でも、その負のループを切るためには、自信の無さという思いを断ち切ることが必要です。婚活を通して、あなたは経験から学び、成長しています。どうか、そこに自信を持ってください。

初対面で踏み込んだ質問をしない

初対面にもかかわらず、踏み込んだ質問をする方が時折いるそうです。例えば、子供(出産年齢)の希望について聞くなどです。これに女性の現在の年齢も絡めて質問するのは最悪のパターンです。

男性が女性の出産について気になる気持ちはよくわかります。また、子供の希望に対するミスマッチを避けるため、早く聞きたい気持ちもわかります。ですが、その前に何より、相手への配慮が一番大切なのではないでしょうか。

お財布を出す

特に出会って間もないうちは割り勘なんて言わず、全額支払いましょう。出費は痛いけど、そこは我慢。ちょっとだけ見栄を張りましょう。相手が気にするなら、食事は自分、その後のカフェは相手に出してもらう、なんていうバランスのとり方もあります。

また、お付き合いを重ねていく中で、割り勘へシフトしていくのはありでしょう。私の経験則ですが、支払いを男性に全額ゆだねるのを良しとせず、自分も出すといってくれる女性の方が、お互いにバランスの取れた、よいお付き合いができました。

あと、特に初回に言えることですが、相手を見て割り勘にする・しないを決める、というのはやめましょう。例え、お断りする相手であっても、時間を割いてくれたことに対する敬意を払いましょう。ただし、相手の態度がよほどひどかったとか、割り勘に固執するのであれば、必ずしもこの限りではありません。

出会った後はスピーディーに

婚活は出会い~お付き合いに至るまでのプロセスが繰り返し、それも早く行われます。また、交際前は複数人へのアプローチが並行して行われることもしばしばです。

だからこそ、良いなと思ったらすぐに次に会う約束を取りに行きましょう。もちろん、相手の気持ちや都合を無視した無理強いは禁物ですので、念のため。

返信が遅くても焦らない

メールやメッセージを送ったのになかなか返事が来ない…。変なことを書いたんじゃないか、と何度も送信内容を見直したり、不安でやきもきするかもしれませんが、99%大丈夫です。そのほとんどは相手が忙しくて返信できていないだけです。

相手にも自分の時間や都合があります。自分の送ったメッセージに自分が期待したスピードと内容の返信をもらえると思うのは自分勝手です。

相手が自分の時間を大切にしているのと同じように、あなた自身も自分の時間を大切にしてください。やきもきしている時間を自分が集中して楽しめることに費やしてください。

断られたことに悩まない

会っている間は良い雰囲気だったのに、後から断られることもあります。ショックは大きいですが、引きずらないでください。

女性は相手を気遣うことに長けており、その場の雰囲気を大切にします。それが故にこうなることもあるのです。

ネガティブな情報を伝えるのは、早すぎず、遅すぎず

ネガティブな情報、例えば離婚歴や子供がいることを、出会った段階では相手が知らないこともあるでしょう。もしくは、知っていてもまだ聞かずにいてくれることもあります。

このような話を伝えるのが早すぎれば、誠実さを伝えることはできても、相手が引いてしまうかもしれません。逆に、遅すぎれば不信感を招くことになります。

相手に伝えるべき事柄は、お互いの心がオープンになれたのを感じてから伝えましょう。ただし、お付き合いをする前には必ず伝えましょう。

せっかくうまくいきそうな雰囲気なのに、ネガティブな情報を伝えることは不安で仕方ないと思います。確かに、それでお断りされることはとても多いです。ですが、ここを乗り切れる相手とは、心をオープンに通わせ、お互いを信じあい、より深い付き合いができるはずです。そんな出会いがあることを信じて活動を続けましょう。

付き合う

婚活の中で唯一といってよい幸せな時間です。そして、結婚に向けた助走期間です。

女心を理解しようとする

女心を完全に理解することはできません。というより、男女の性を問わず、誰かの心を完全に理解することはできません。自分自身の心ですら無意識の領域があるぐらいです。他人の心など言わずもがなです。

ですが、理解しようとすることはできます。お互いが好意を抱いていれば、相手に理解されたいとも思っています。そして、相手に伝えたい気持ちは態度に現れることも、言葉に現れることもあります。

もし、言葉で現れたなら、それを真摯に受け止めてください。言葉で表現するということはとても勇気のいることです。それがネガティブな内容であればなおさらです。それを乗り越えて言葉で伝えてくれたのですから、まずは聴いてください。そして、受けとめてください。共感し、その気持ちに寄り添ってください。

女心を理解しようとするのに知識が役に立つこともあります。例えば、私が参考にした本や記事の一例を紹介します。

プロカウンセラーが読み解く女と男の心模様

プロカウンセラーが読み解く女と男の心模様

理系のための恋愛論 | コラム | マイナビニュース

ただし、心は理屈や理論で動くものではありません。心はそれぞれのもの。こうに違いないと決めつけず、相手(の心)と真摯に向き合ってください。

相手の興味に興味を持つ

もっといえば、相手の話が少しでも琴線に触れたなら、自身がやってみてはいかがでしょうか。例えば、好きな本を教えてくれたら読んでみる。

やってみて、相手と同じ気持ち・感想を持てなくったっていいのです。次に会ったとき、その素直な気持ち・感想を伝えてみてください。好意を持ってくれている相手ならば、自分の好きなことに興味を持ち、行動してくれたことが何よりうれしいのです。

プレゼントは中身よりプロセス

何かをプレゼントする際、例えお土産であったとしても、なぜこれを選んだのか、軽く説明を添えると、とても喜ばれます。むしろ、プレゼント自体よりその説明に喜んでくれるかもしれません。選んだプロセスを説明できるということは、相手のことを考えて選んだということであり、大切に思う気持ちが伝わるからです。

ただ、当然のことですが、中身もプロセスも独りよがりを押し付けてはいけないことに注意です。例えば、アクセサリーなどは相手の趣味に合うことが前提ですから、勝手に選ぶのではなく、一緒に選んでみてはどうでしょうか。

決断する

婚活では苦しく辛い決断をすることが度々あります。ですが、次に向かうためにはその決断が必要です。

鬼になる

お断りをする、もしくは別れると決断したなら、どれだけすがられてもグッとこらえて心を揺らさないでください。あいまいな状態を続けることは長期的に見て双方にとってマイナスになります。また、決断をするときはそれだけの覚悟を持ってください。

お別れは自分の言葉で伝える

結婚相談所によっては、お断りもお別れも担当者が代行してくれることがあります。トラブル防止のため、自分では伝えず、担当者を介して伝えることを推奨していることもあります。

交際前のお断りであれば、これでもいいかもしれません。ですが、ある程度の期間のお付き合いした後のお別れの場合だけは、自分の口で伝えたほうが良いと考えています。担当者経由でお別れを伝えられた時の辛さは想像を超えるものがあります。お付き合いをした相手のためにも、どれだけ辛くとも、自分の口で伝えてください。

ただ、トラブルが想定されるのであれば、事前に担当者へ相談するのがよいでしょう。

去る者を追うな

去る決断のした方を翻意させることはほぼ無理です。辛くても送り出し、次の出会いに目を向けてください。

逃した魚は大きいといいます。実際に大きいこともあります。ですが、諦めなければ次のチャンスが巡ってきます。

別れが教えてくれること - ぱと隊長日誌

最後に

自分がなぜ婚活をしたのか。それは、結婚生活が時には辛いこともあるが、トータルでは幸せなものだという信念があったからです。

婚活は楽しい時間より辛い時間のほうがずっと長かったです。ゴールの見えない日々に何度もくじけました。お別れのたびに心が折れそうになりました。それでも、何人もの方が「あなたなら大丈夫」と励ましてくれました。そして、変わらぬ信念がありました。それらが支えとなり、前に進む原動力となりました。
あなたなら大丈夫 - ぱと隊長日誌

婚活の成果は結婚だけではありません。婚活で最も重要な成果は、多くの方と真剣に向き合い、自分とも向き合うことで、内面を磨けることだと考えています。この活動の先に、あなたがもっと素敵になった自分自身に出会えることを願っています。

pg_rman の「最新の状態までリカバリ」の処理内容

目的

pg_rman で復元ポイントを指定せずにリストアを実行し、PostgreSQLを起動すると、可能な限り障害直前の状態までリカバリされます。pg_rman のマニュアルで「リストア・オプション」の節に以下の説明があります。

  • --recovery-target-timeline TIMELINE
    • どの時系列でリカバリを行うかを指定します。省略時は現在のタイムライン($PGDATA/global/pg_control から取得)でリカバリを行います。
  • --recovery-target-time TIMESTAMP
    • リカバリ処理をどこまで行うかを示す時刻を指定します。省略時は可能な限り最新の状態までリカバリを行います。
pg_rman

pg_rman がどのようにして障害直前の状態にまでリカバリしているのか、リストア処理の概説と共に説明します。

環境

今回、参考にした pg_rman のソースコードは以下のリンクからダウンロードしました。
https://github.com/ossc-db/pg_rman/archive/v1.3.4.zip

挙動確認は以下の構成で行いました。
CentOS 7
PostgreSQL 9.6
pg_rman-1.3.4-pg96

説明

ベースバックアップからのリストアは以下の流れで行われます。

  1. オンラインWALとサーバログのバックアップ
  2. $PGDATA 配下の削除
  3. バックアップから $PGDATA 配下のリストア
  4. バックアップからアーカイブWALのリストア
  5. オンラインWALのリストア(先ほどバックアップしたオンラインWAL)
  6. recovery.conf の作成

このリストア処理が完了すると、ベースバックアップ+アーカイブWAL+オンラインWALによる完全リカバリを行える状況になります。見方を変えると、 --recovery-target-time を指定しなければ完全リカバリになります。任意の時点(例えばバックアップ時点)に戻したい場合は --recovery-target-time を指定して、不完全リカバリを実行する必要があります。

補足

バックアップされていないアーカイブWALのリストア時の扱い

バックアップされていないアーカイブWALに対し、リストア処理では何もしません。つまり、そのまま残ります。これは完全リカバリを行うために必要です。

リストア処理でのオンラインWALとサーバログのバックアップ

pg_rman のマニュアルには以下の記載があります。

pg_rmanがリストア中に未アーカイブの WAL をバックアップしつつ、その他のデータを削除します。 未アーカイブの WAL のバックアップは次に全体バックアップを取得するまで保持されるので、リカバリ結果が望んだものでなかった場合は再度リストアからやり直すことが可能です。

pg_rman

実際には未アーカイブのWAL(オンラインWAL)だけでなく、サーバログもバックアップされています。

コピーは以下のように行われます。

対象 コピー元 コピー先
オンラインWAL $PGDATA/pg_wal $BACKUP_PATH/backup/pg_xlog
サーバログ $SRVLOG_PATH $BACKUP_PATH/backup/srvlog

※各環境変数については pg_rman マニュアルの「パラメータの指定方法」(http://ossc-db.github.io/pg_rman/index-ja.html#waytopassoptions)を参照ください。

該当処理のソースコードを抜粋します。
restore.c (778)

/* backup online WAL */
snprintf(pg_wal_path, lengthof(pg_wal_path), "%s/pg_wal", pgdata);
snprintf(work_path, lengthof(work_path), "%s/%s/%s", backup_path,
	RESTORE_WORK_DIR, PG_XLOG_DIR);
dir_create_dir(work_path, DIR_PERMISSION);
dir_copy_files(pg_wal_path, work_path);

/* backup serverlog */
snprintf(work_path, lengthof(work_path), "%s/%s/%s", backup_path,
	RESTORE_WORK_DIR, SRVLOG_DIR);
dir_create_dir(work_path, DIR_PERMISSION);
dir_copy_files(srvlog_path, work_path);

pg_xlog と pg_wal

pg_rman は対応する PostgreSQL のバージョン毎にパッケージを用意しています。
pg_rman-1.3.4 のパッケージ間で PG_XLOG_DIR の定義に差異がありました。

ダウンロード元
Release 1.3.4 · ossc-db/pg_rman · GitHub

Source code (zip) - pg_rman.h

#define PG_XLOG_DIR "pg_wal"

pg_rman-1.3.4-pg96.tar.gz - pg_rman.h

#define PG_XLOG_DIR "pg_xlog"

この差異について、リリースノートの「変更点」に説明がありました。

PostgreSQL 10では'pg_xlog'が'pg_wal'に変更されることや、SQL関数名の中の'xlog'も'wal'に変更されることに対応しました。

Release 1.3.4 · ossc-db/pg_rman · GitHub

ベースとなる "Source code" は最新のバージョン(現時点で開発中の PostgreSQL 10)をターゲットとしているようです。

リストアとリカバリの違い

「リストア」と「リカバリ」という用語は pg_rman のマニュアルで共につかわれています。
一例を挙げます。

リストア完了後にpg_rmanが生成したrecovery.confの内容を確認し、必要に応じて修正を行います。 今回の場合は、最新の状態までリカバリするため特に修正せず、そのままPostgreSQLを起動してPITRを実施させます。

pg_rman

「リストア」と「リカバリ」の定義(使い分け)を調べたところ、Oracle Database を例に解説したエントリがありました。

Oracleデータベースのリストアとは、バックアップ媒体から元の場所もしくは新しい場所へデータベースを構成する物理ファイルをコピーして復元することを指します。
Oracleデータベースのリカバリとは、REDOログファイル(バックアップ取得~現在までのトランザクションの変更情報が保存されています)を使用してバックアップ後に作成されたデータベースへ変更情報を反映してデータを復旧することを指します。
参照元より抜粋)

Oracle:リカバリとリストアの違い | 覚え書き.com

この解説を踏まえて pg_rman のマニュアルを読み直したところ、この解説に沿った使い分けがなされているようでした。そこで、本エントリでもこの解説にそった使い分けを行いました。