キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
[書評&勝手に補足] SQLポケットリファレンス(改訂第4版) (1)
0
    評価:
    朝井 淳
    技術評論社
    ¥ 2,138
    (2017-02-18)
    コメント:細部は甘いが、手元に置いて便利。ですが「脇の甘さ」が広がった分☆ひとつ減

    7年ぶりの改訂ということで期待して購入しましたが、以下のレビューのように少しがっかりしました。

    ★★★☆☆ 細部は甘いが、手元に置いて便利。ですが「脇の甘さ」が広がった分★ひとつ減(Amazon)

    Amazonのレビューではリンクとか張れないので(多分)ここでいくつか補足を。。。。

    1.MySQL 5.6でサポートされたでマイクロ秒表記がない(TIME, DATETIME, TIMESTAMP)

    MySQL 5.6.4 以降では、マイクロ秒 (6 桁) までの精度を持つ TIME、DATETIME、および TIMESTAMP 値の小数秒に対応できるようになりました。

    2.MySQl 5.6で非推奨、5.7で取り除かれたyear(2)の記述が三版のまま残っている

    11.3.4 YEAR(2) の制限と YEAR(4) への移行

    3.PostgreSQL 9.2/MySQL 5.7でサポートされたjson型の記述なし。関連する関数も当然記載なし。。。。
     利用頻度とこれからの新規開発を考えるとXML関連の記述をばっさりなくして、JSON型の記述にしてもいいのではないかと思います。

    PostgreSQL JSON型についての使い勝手とパフォーマンス、時々ハマりどころの調査(Qiita)
    MySQL 5.7のJSON機能を試してみる(MySQL Server Blogより)

    4.ビューの説明(小ネタ)
     「ビューはそれだけで完結しているオブジェクトなので、パラメータ値によって制御するといったことはできません。
    このような場合には、ストア゛ードプロシージャを作成することをお勧めします。」とのことですが、
    Accessだと、パラメータクエリをすすめる必要があるのでは?

    5.「1.7 ストアードプロシジャ」
     Access 2010から利用可能になった、の記述があってもいいんじゃないかと。。。

    6.「1.8 トリガー」

    × Accessを除くデータベースで、トリガーを利用できます。
    ○ 古いAccess(2010より前のバージョン)を除くデータベースで、トリガーを利用できます。

    7.COLUMN ROWNUMによる行制限

    「12c以前のOracleでは、SELECTにTOPやLIMITを指定することはできませんが、」

    12c以前というよりは、12cより前は行制限(Oracle 12cでOFFSET句とFETCH句がサポート)を簡単に実現する機能がなかったことを
    いいたい用ですが、TOPはMS SQL Serverですし、LIMITはMySQLのことなので、なんかピンボケな印象です。
    なのでよりよい表記はいかになると思います。

    「12cより前のOracleでは、SELECTに行制限の記述(OFFSET句やFETCH句)を指定することはできませんが、」

    8. WITH句
     SQLiteは3.8.3からサポートしているのに未サポート扱い。。。。
    9. WITH再帰クエリー
     SQLiteは3.8.3からさポートしているのに未サポート扱い。。。。

    basic recursive query on sqlite3?(stack overflow)

    10. WITH再帰クエリーでRECURSIVE指定できるはPostgreSQLだけ(?!)
     んなわけない。
    ×「PostgreSQLの場合、再帰クエリーを実行する際には、WITHの後にRECURSIVEキーワードを指定する必要があります。他のデータベースではRECURSIVEを指定するとエラーになります。」

     そもそもSQL標準で定めた表記WITH RECURSIVEでRECURSIVEを指定するとエラーになるわけがない。
    これは、PostgreSQLではRECURSIVEを表記しないとエラーになるが、他のデータベースでは省略してもエラーにならないことの記述があり、それを読み間違えたと類推します。

    Hierarchical and recursive queries in SQL(wikipedia)

    ○「PostgreSQLの場合、再帰クエリーを実行する際には、WITHの後のRECURSIVEキーワードは省略できません。他のデータベースではRECURSIVEを省略できます。」

    11. LIMIT句
     IBM DB2 9.7 Fix Pack 2から、対応しています。(DB2_COMPATIBILITY_VECTORに定数"MYS"を設定する必要があり)

    DB2にMySQL/PostgreSQL互換のLIMIT/OFFSET句が追加(Unofficial DB2 BLOG)

    とりあえず、ここまで。Access関連は後日補足するかも(なんといっても離れてから久しい。。。)

    JUGEMテーマ:コンピュータ



    | meijik | クロスデータベース | 21:45 | comments(0) | trackbacks(0) | - | - |
    今月(2016-05)末、東京と大阪でオープンソースRDBMSのお話させていただきます。
    0
      まず、東京ではジャストシステムが主催のJust TechTalkにて以下の内容・日程にてお話させていただきます。

      JustTechTalk#06 スマイルゼミの裏側(DB編)とRDBMS最新動向
      2016-05-27(金)19:15 - 20:40


      内容は昨年夏にCEDEC2015でお話させていただいた内容の圧縮・アップデート版にする予定です!

      オープンソースRDBMS、イマドキの機能を使おう!(CEDEC2015)


      実は私は1996年より8年弱、ジャストシステムの東京研究所に所属して働いていたことがあり、その当時の知り合いからの依頼です :)

      大阪では翌日の2016-05-29 (土) の午後、以下の内容にてお話させていただきます。

      第3回 関西DB勉強会
      2016-05-28(土)13:00 - 18:00


      こちらは各RDBMSの用語やアーキテクチャの共通認識を持つ試みで、木村からはFirebird/MySQLの観点からの参加となります。

      それぞれお近くに住まわれていて、ご興味ありましたら、ぜひご参加ください。
      それぞれ懇親会もありますので、木村の馬鹿話が聞きたいひとはそちらもぜひ :) !


      JUGEMテーマ:コンピュータ


      | meijik | クロスデータベース | 08:58 | comments(0) | trackbacks(0) | - | - |
      商用データベース御三家、無償版アップデート(2015/01)
      0
        四年ほど前に以下のようなブログエントリを書きました。

        商用データベース御三家、無償版アップデート(2011/05)

        この四年間に商用データベース御三家の無償版も少しアップデートされましたので、それについてまとめておきます。

        おおまかにいえば現状維持のSQL Server, 一歩後退のOracle, 攻めのIBM DB2といったところです。

        1.SQL Server Express
        前回以降以下の二つのバージョンアップがなされました。

        SQL Server 2012 Express
        SQL Server 2014 Express

        リソースの制限はかわらない(RAM: 1GB, DBサイズ: 10G)ものの、CPUの制限は1物理CPUから、1物理CPUまたは4コアの小さいほう、
        ということで(ある意味)制限が強化されてしまいました。まぁほとんどのノートパソコン・デスクトップパソコンはクアッドコアで
        ヘキサコアはないので、あまり変わらないといえば変わらないです。

        本家から制限された機能一覧についてはwikipediaのエントリが詳しいです。

        SQL Server Express(wikipedia)

         前回触れた「SQL Server CE(Compact Edition)」については、4.0より後新バージョンがでませんでした。。。。
        それを利用するEntity Frameworkは最新版がでていますが。例えば以下はそれを使ってMicrosoft Azure上で動かすというブログエントリです。

        Microsoft Azure でDBを無料で使う その1(Jiro Laboratory)

        2.Oracle XE
        前回触れた11.2がリリースされました。

        【速報】Oracle無償版:Oracle Database 11g Express Edition(XE)がリリースされました!(オラクルエンジニア通信)

        リリースはWin版32bit/64bit, Linux版64bitとなりました。各種制限はかわりません。(1CPU -> 1Socket(1core)くらい?)

        Oracle Database Express Edition 11g Release 2開発、導入、配布を無償で

         あいかわらずパッチは提供されず、本家は12cがでましたが、そのExpress版は未リリースです。。。。

        3. DB2 Express-C
         前回以降以下の二つのバージョンアップがなされました。(2CPU->2core)

        10.1
        10.5

        10.5では利用できるメモリが一挙に四倍(4GB -> 16GB)になりました。ここまで大盤振る舞いして本家の売り上げが鈍らないか他人事ながら心配です :)
        ただしデータベースサイズは10.1までの無制限が、10.5では15TBに制限されました。。。。ってTB(GBじゃないよ)なので、ほとんどの人に問題にならないと思います。
        相変わらず対応プラットフォームも広いです。

        無料のDB2 Express-C v10.5が公開!利用可能メモリが16GBに拡大(Unofficial DB2 BLOG)


        最適なDB2 10.5のエディションを選択する方法(developerWorks)

        またAMIの配布なども含めて、やはり「攻めのDB2」ですね。

        JUGEMテーマ:コンピュータ


        | meijik | クロスデータベース | 04:46 | comments(0) | trackbacks(0) | - | - |
        第6刷sqlap
        0
          .temp.jpg
          和田さんのむちゃぶり(指摘あったらあさってまでにおしえて♪だっけ...)に、このように答えたご褒美に貰った。

          指摘の(6),(8)以外は全部反映されてた! 和田さん&編集の方ご苦労様でした。

          | meijik | クロスデータベース | 21:06 | comments(0) | trackbacks(0) | - | - |
          [勝手に補足]SQLの観点から「Oracle Database」「PostgreSQL」 「MySQL」の特徴を整理しよう!
          0
            結構人気(?) のこの記事、ざっとよもうと思ったら最初に誤植(?) があったので、通読してまとめておきます。。。。

            [2014-10-09 12:00 追記] 現時点までに更新があり、下記指摘はほとんど修正・更新されているようですが、とりあえず記録のために本エントリは残しておきます。「誤植や誤記ねえじゃん」といわないでください。指摘の後更新されたので。。。。

            SQLの観点から「Oracle Database」「PostgreSQL」 「MySQL」の特徴を整理しよう!(DBonline)

            なお、以下二ページ目の閲覧は会員登録(無料)が必要です。

            表2:主なデータ型の比較

            [誤]
            Oracle、PPEE(※) PostgreSQL MySQL
            NUMBER NUMERIC VARCHAR

            [正]
            Oracle、PPEE(※) PostgreSQL MySQL
            NUMBER NUMERIC NUMERIC

            まぁVARCHARに入らんこともないですが。。。。タイポでしょう。。。

            表3:表名・列名の命名規則の比較

            [誤]
            アンダースコア(_)以外の記号の利用($、#、- など) ○ ○ ×

            [正]
            アンダースコア(_)以外の記号の利用($、#、- など) ○ ○

            ``でかこってください。$は囲わなくても可能でしたが。。。。

            mysql> create table $meiji(i1 int);
            Query OK, 0 rows affected (0.56 sec)

            mysql> create table mei$ji(i1 int);
            Query OK, 0 rows affected (0.41 sec)

            mysql> create table `mei#ji`(i1 int);
            Query OK, 0 rows affected (0.41 sec)

            mysql> create table `-mei#ji`(i1 int);
            Query OK, 0 rows affected (0.43 sec)

            mysql> show tables;
            +-----------------+
            | Tables_in_01mon |
            +-----------------+
            | $meiji |
            | -mei#ji |
            | mei#ji |
            | mei$ji |
            +-----------------+
            4 rows in set (0.00 sec)

            5.2. スキーマオブジェクト名


            表5:連続値の生成機能の比較

            [誤]
            CREATE TABLE test
            (testno NUMERIC(2) AUTO_INCREMENT
                         PRIMARY KEY);

            [正]
            CREATE TABLE test
            (testno INT AUTO_INCREMENT
                         PRIMARY KEY);

            AUTO_INCREMENTに指定できるのは整数と浮動小数点(float, double)だけで、固定小数点のものはエラーがでます。

            mysql> CREATE TABLE test(testno NUMERIC(2) AUTO_INCREMENT PRIMARY KEY);
            ERROR 1063 (42000): Incorrect column specifier for column 'testno'
            mysql> CREATE TABLE test(testno INT AUTO_INCREMENT PRIMARY KEY);
            Query OK, 0 rows affected (0.31 sec)

            8.1.17. CREATE TABLE 構文

            [現在の記述]
             PostgreSQLでは、データ型にSERIAL型を指定すると暗黙的に順序が作成され、その順序を使用するように設定されます。

            [改善案]
             PostgreSQLでは、データ型にSERIAL型を指定すると暗黙的に順序が作成され、その順序を使用するように設定されます。MySQLでもデータ型にSERIAL型を指定でき、SERIAL は BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE の別名です。

            6.1.1. 数値型の概要

            mysql> CREATE TABLE test
            -> (testno SERIAL);
            Query OK, 0 rows affected (0.48 sec)

            mysql> show create table test¥G
            *************************** 1. row ***************************
            Table: test
            Create Table: CREATE TABLE `test` (
            `testno` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
            UNIQUE KEY `testno` (`testno`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8
            1 row in set (0.00 sec)

            ありゃ、結構時間がかかったので、今日はここまで。三ページ以降はまた次の機会に。。。。

            しかし、土曜日早朝になにやってんだ >> おれ

            [2014-10-04 09:48 追記]

            三ページ以降はそれほど間違いなさそうなので、追記としてここに記述します。

            三ページ目: 特に問題なし
            四ページ目: Oracle 12cのOFFSET, FETCH句の実例がほしい。たとえば以下。

            SELECT ename,sal FROM emp
            ORDER BY sal DESC
            OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY;

            そしてこの記法がIBM DB2でもともと使われていて、OFFSETを拡張されてSQL標準になったことも
            記述しているとよいと思います。(この原稿末になるべく標準つかえ、と書いてあるので)

            SQL標準、ということでPostgreSQLでも8.4からOFFSET ... FETCHが使えます。(MySQLはこの書式使えません)

            Oracle Database 12cについて:パート1(Ask Tom)
            SELECT (PostgreSQL 8.3)
            SELECT (PostgreSQL 8.4)

            表12:引数の指定が異なる関数の比較
            Oracle SELECT TO_CHAR(sal) FROM emp;
            PostgreSQL SELECT TO_CHAR(sal,'9999') FROM emp;
            MySQL SELECT FORMAT(sal,0) FROM emp;

            「引数の指定が異なる」ということで、引数が違うだけで結果が同じことを期待しますが、
            Oracleの場合は第二引数の書式指定を省略しておりTM9がデフォルトとして使われます。

            数値用の書式モデル (SHIFT the Oracle)

            PostgreSQLでは第二引数が省略できないので、'9999'を指定していますが、元の本のように「9が1つの数値を表し、たとえば4桁の数値の場合、9999と表記します」の説明がないとわかんないですね。。。。さらにOracleにより近づけるなら単に'9999'とするより'FM9999'としたほうがいいんじゃないですかね? (すみません、すぐに動かせる環境がないので、確認はできていません)

            9.8. データ型書式設定関数(PostgreSQL9.3)

            MySQLの場合はFORMATで第二引数をゼロにすると三桁区切りがデフォルトになり、出力文字列が違ってきます。(下の本の検索結果のようにはなりません)。

            mysql> select format(1200000,0);
            +-------------------+
            | format(1200000,0) |
            +-------------------+
            | 1,200,000 |
            +-------------------+
            1 row in set (0.00 sec)

            このように単純に数値を文字列に変換する目的ならばFORMATのかわりにCASTを使います。

            mysql> select cast(01200000 as char);
            +------------------------+
            | cast(01200000 as char) |
            +------------------------+
            | 1200000 |
            +------------------------+
            1 row in set (0.00 sec)

            五ページ目: 特に間違いはないけれどもMySQL用に若干補足。

            MySQL(InnoDB)の場合、autocommit=offで自動コミットをオフにすると、Oracle/PPEEと同様の動作をします。

            13.5.10.2. InnoDB と AUTOCOMMIT
            オートコミットをデフォルトオフにする(MySQL 5.5の場合)

            六ページ目は特にありませんでした。

            以上です。 

            JUGEMテーマ:コンピュータ


            | meijik | クロスデータベース | 02:23 | comments(0) | trackbacks(0) | - | - |
            JPOUGのイベントに参加しました。
            0
              首記(下記)のイベントに参加しました。

              JPOUG> SET EVENTS 20140907

              今回はOracle ACEの平塚さんによるMySQLのロックについて(仮)(15:00-15:45)や
              LT(16:00-)で「MySQLユーザから見た「ここが{ヘンだ,スゴい}よOracle Database」」など
              あり大変おもしろかったです。平塚さんのロックの話、よかったです。資料は更新されたのち
              公開される予定だそうで、みなさん、ご期待ください。

              当日場所はJR飯田橋西口(市谷方面)徒歩1分飯田橋グラン・ブルーム 株式会社インターネットイニシアティブ様の13Fセミナールームでの開催。
              私はといえばずっとLarge Roomにいすわり、篠田さんの「知られざる Oracle Database 12c の新機能」から聞き始めました。

              細かい話がおおかったですが、まぁ技術サポートをする人の立場を想定すると、
              トラブルがおきたときに、原因究明には紛らわしい機能がふえたなーという感じ。
              (ちなみに私はOracle DBのサポートはしないので、あくまで「イメージ」です。。。)

              ・後で参照するvarchar2/nvarchar2最大長の拡張
              ・インビジブルカラム
              ・IDENTIFY列
              ・オンラインでがんばるなにか。。。。

              篠田さんのページではありませんが、以下のところにリストアップされているものにあります。

              Oracle 12c Articles(ORACLE-BASE)

              varchar2/nvarcha2の最大長が4000から時流にのって32Kになったのは、よかったですけど、

              Extended Data Types(Oracle 12.1 Manual)

              内部実装がBLOB(?)だそうで。。。

              Extended Data Types in Oracle Database 12c Release 1 (12.1) (ORACLE-BASE)


              石川さんの「エンジニアなでしこ魂3 −オラクルとプラチナと私−」
              なぜ3かというと2が以下で公開されているからだそうで。

              エンジニアなでしこ魂2―BIソリューション開発で学んだ「教科書には載っていないこと」―石川貴美子さん(DBプロに会いたい!)

              まぁこの記事のように「さわやか」さんでした。私との接点はヨガだけだYo!

              うちあげは、主に平塚さんと、コーソルの新人さん(新卒と2年ぶりくらいにあった方)と、飲み食いしていましたが、新卒の人はやはりまぶしいです。
              ほぼ倍の年齢の私はやる気と、その可能性にあっとうされるばかり。。。。がんばってください。。。。

              JUGEMテーマ:コンピュータ


              | meijik | クロスデータベース | 23:10 | comments(0) | trackbacks(0) | - | - |
              再来週末(2014/09/07(日)) JPOUGのイベントでMySQLのお話あります。
              0
                日曜日が週末なのか週アタマなのか議論の余地はありますが w

                以前私も参加・セッション講師させていただいたJPOUGのイベントですが、
                次回は首記の日程で13:00-17:00に行われます。

                JPOUG> SET EVENTS 20140907

                今回はOracle ACEの平塚さんによるMySQLのロックについて(仮)(15:00-15:45)
                LT(16:00-)で「MySQLユーザから見た「ここが{ヘンだ,スゴい}よOracle Database」」など
                ありますので、MySQLerの皆様にもお楽しみいただけると思います。

                ご興味ございましたら、是非登録・ご参加ください! (無料です)

                # 平塚さんからはこういった話のアップデートが聞けるかもしれませんね....(あくまでキムラの希望であり、想像です)

                2009-01-12 MySQL InnoDBのネクストキーロック おさらい

                2009-06-18 MySQL InnoDBにおけるロック競合の解析手順

                JUGEMテーマ:コンピュータ


                | meijik | クロスデータベース | 05:03 | comments(0) | trackbacks(0) | - | - |
                [勝手に補足]DBアタマアカデミー第1回記憶装置のトレードオフとバッファの考え方
                0
                  さてみなさん、ご無沙汰の木村です。

                  私は以前からデータベース各種連載を[勝手に補足]してきたのですが、どうやらミックさんの連載については
                  第1回を補足していなかったみたいなので、四年たってからやっとの補足です。。。。

                  幸い元記事はWEB+DB PRESSの総集編でも読めますし、以下のWeb版も読めますので、是非チェックしてみてください!

                  DBアタマアカデミー

                  さて、勝手に補足の時間です(Web版を元にしてます)♪雑誌記事一回分を2〜3回に分割してWeb版になってます。(今回は(1)〜(3)で(2)へのツッコミ)

                  第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(1)

                  特に補足ありません。。。。



                  第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(2)

                  # MySQL 5.5->5.6はデフォルト値が大きく変わりましたが、この比較表にでている部分については特に変更無く同じとなってます。詳しくはこちらをどうぞ。

                  (1) 後だしじゃんけんですが(笑) PostgreSQL 8.5は9.0としてリリースされました。

                  PostgreSQL 8.5 は 9.0 としてリリース(Let's Postgres)

                  (2) MySQLにはロールフォワードリカバリ用のバイナリログがある

                  OracleではREDOログはクラッシュリカバリとロールフォワードリカバリの両方で利用されますが、
                  MySQL(InnoDB)のInnoDBログはクラッシュリカバリにしか利用されません。
                  ロールフォワードリカバリにはInnoDBに限らず、MySQLシステム全体の仕組みとしてのバイナリログが利用されます。

                  バイナリログのバッファサイズは32KB(デフォルト)です。
                  MySQL 5.5以降トランザクション用のbinlog_cache_sizeと非トランザクション用のbinlog_stmt_cache_sizeで指定します。
                  MySQL 5.1以前はbinlog_cache_sizeだけでした。

                  MySQLではバイナリログをロールフォワードリカバリ以外に、レプリケーションでも利用します。ちと内容は古いですが、以下の記事は参考になります。

                  現場指向のレプリケーション詳説

                  (3) PostgreSQLでは「ログをとらない」指定がテーブル単位でできる。

                  これもPostgreSQL 9.1以降なので後だしじゃんけんというか、アップデートですがUNLOGGEDテーブルというのが追加されました。

                  RDS for PostgreSQL で UNLOGGED テーブルを試してみる

                  (4) 本文注3)のPostgreSQLの非同期コミットと同様な指定(まったく同じではないですが)がMySQLにもある。

                  MySQLではACIDを担保するために、バイナリログ用にsync_binlog, InnoDBログ用にinnodb_flush_log_at_trx_commitの指定があります。それぞれの指定により同期を緩めることが可能です。そのときのデメリットは本文注3)と同じです。

                  バイナリログでACIDを担保するにはsync_binlog=1に設定する必要があります。(デフォルトは歴史的経緯から0)
                  これはMySQL 5.5までは大きくパフォーマンスに影響していましたが、MySQL 5.6からは大きく改善されています。
                  (実はこれだけでもMySQL 5.6にアップグレードする価値はあると思うのですが)詳しくは以下のSH2さんやDimitriKのエントリをどうぞ。

                  2012-07-17 MySQL 5.6におけるsync_binlog=1の改善について&勉強会のお知らせ

                  MySQL Performance: Binlog Group Commit in 5.6

                  SH2さんも言及されていまが、PostgreSQLも9.2から高負荷時にグループコミットが効果的に動作するよう改善されています。

                  PostgreSQL 9.2 に関する技術情報(SRA OSS)

                  [2014-08-16 追記] 以下(5),(6),(7)追記いたします。あらためて見直しました。

                  (5) ログ、ログバッファの説明が間違ってます。(ディスクへの更新は、あとでゆっくりやるわけではありません。。。)
                   「ログバッファは更新処理(INSERT,DELETE,UPDATE)の実行に関係します。実はDBMSは,こうした更新SQLをユーザから受け取ったとき,すぐにディスク上のデータを変更しているわけではありません。一度このログバッファ上に変更情報を溜めて,ユーザに処理終了を通知してしまいます。ディスクへの更新は,あとでゆっくりとやっています(ゆっくりといっても,通常は数秒間隔ですが)。」
                   この説明は(6)でも説明しますが、ログとDB本体とかごちゃまぜになっています。直すならこんな感じ?

                  「ログバッファは更新処理(INSERT,DELETE,UPDATE)の実行に関係します。実はDBMSは,こうした更新SQLをユーザから受け取ったとき,すぐにディスク上のデータを変更しているわけではありません。一度このログバッファやデータキャッシュ上に変更情報を溜めて,ユーザに処理終了を通知しています。ログファイルへのディスク反映はcommit時に同期して行い,データファイルへのディスク反映はあとでゆっくりと非同期にやっています(ゆっくりといっても,通常は数秒間隔ですが)。」

                  (6) メモリ→ディスクへのフラッシュ説明が、ログとDB本体とであいまいになっています。。。
                  「単純にSQL実行時点でディスクを更新してしまえば簡単なのに,DBMSがそうせず,わざわざディスクの更新タイミングをずらしている理由は,これも結局パフォーマンスを良くしたいからです。」とありますが、ここではログバッファ→ログへのディスクフラッシュ、と、データキャッシュ→データのディスクフラッシュの話が混在してしまっているような印象を受けます。

                   基本的にログへの反映はcommit時に必ず行われる「同期」処理がACIDを担保するためには必須です。この処理はデータファイルにランダムのread/writeを行うのに対して、ログファイルにシーケンシャルにwriteするだけですので、比較的高速に行うことができます。
                   これに対して、データファイルへの反映は「非同期」処理です。非同期ですが適当なタイミングでデータキャッシュとデータファイルの同期がとられます。これをチェックポイント処理と呼びます。クラッシュした後にはチェックポイント時のデータファイルと、チェックポイント時以降のログファイルがあれば、復旧できる、という仕組みです。MySQL(Cluster含む)の説明は奥野さんの以下のブログエントリが参考になります。

                  オトコのぷちトリビア - WAL

                  PostgreSQLについては、鈴木さんの以下のスライドシェアが良い資料です。

                  PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)

                  (7) 注2)の説明がヘン
                  「ログバッファを持たず,SQL実行時,ダイレクトにディスクを更新にいく方法を採用しているDBMSも,少数ですがあります。たとえば,MySQLでInnoDBエンジンを使用した場合がそうです。表1のMySQLの備考欄で「InnoDBエンジン使用時のみ有効」と限定しているのはそのためです。」とありますが、たとえば、の後はMyISAMじゃないのかなぁ。また、ここでもちょっとログとデータファイルの関係があいまいです。つまり「WAL(Write Ahead Log:ログ先行書き込み)や独自のデータキャッシュの仕組みを持たず,SQL実行時,ダイレクトにディスクを更新にいく方法を採用しているDBMSも,少数ですがあります。たとえば,MySQLでMyISAMエンジンを使用した場合がそうです。表1のMySQLの備考欄で「InnoDBエンジン使用時のみ有効」と限定しているのはそのためです。」でどうでしょう。

                  第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(3)

                  このパートも特に補足ありません。。。

                  では、よいお盆を!!

                  JUGEMテーマ:コンピュータ


                  | meijik | クロスデータベース | 07:45 | comments(0) | trackbacks(0) | - | - |
                  IBM DB2の同期レプリケーションもMySQL5.5でいうところの準同期レプリケーション相当ですよ。
                  0
                    以前下記のようなブログエントリを書きましたが、IBM DB2のHADRによるレプリケーションも「同期」と呼ばれるものはMySQLでいうところの準同期レプリケーションとのことです。

                    PostgreSQL9.1の同期レプリケーションはMySQL5.5でいうところの準同期レプリケーション相当ですよ。

                    # 逆にMySQLのデフォルトの非同期レプリケーションはIBM DB2でいうところの「超非同期」と呼ばれるものに該当します。(超....)

                    今回はClub DB2の「第141回:追加公演決定!!DB2 10新機能のご紹介」に参加して(第140回は仕事が押してしまい参加できませんでした。。。)DB2 10の結構地味目な機能の説明をのまっちからうけてきました。

                    データベースの機能としては、最近各データベースがお互いのいいところを取り入れたり、刺激しあったりして、結構いい感じで進歩が見られてGoodです。主要な機能はOracleとIBM DB2でしのぎを削っていますが、まだMySQLには採用されず(というかDBの性格的に採用されそうにない)ものも多々あります。

                    たとえば、Multi-Temperature Storageやテンポラル表、ジャンプ・スキャン(Oracle でいうところのインデックススキップスキャン)、スタースキーマ照合や、pureScale Featureなど。

                    逆にレプリケーションや、INGEST(IMPORT/LOAD Utility)的なものは、MySQLのほうが先行していて、たとえばレプリケーションの1:nやカスケードはすでにできますし、INGESTの簡単なコマンドくらいならMySQLのLOAD DATA INFILEの構文(私の本のp.195あたり)で行うことは可能です。

                    勉強会の後の食事会では、私の本「プロになるためのデータベース技術入門」をじゃんけん大会で一冊提供しました。じゃんけんで勝ち取ったかた、ぜひご活用ください。

                    対外的なIBM DB2 10の新機能はこちら

                    JUGEMテーマ:コンピュータ
                    | meijik | クロスデータベース | 19:41 | comments(0) | trackbacks(0) | - | - |
                    PostgreSQL9.1の同期レプリケーションはMySQL5.5でいうところの準同期レプリケーション相当ですよ。
                    0
                      JUGEMテーマ:コンピュータ


                      てっきり「本当に同期」のものかと思っていたら、昨日OSC2011Tokyoでポスグレ関係の人に聞いた話とマニュアル、以下のエントリなどをみるとMySQL5.5でいうところの「準同期レプリケーション」、つまりログが実際に書かれたことを保証する、ログの「同期レプリケーション」とのことです。

                      2011-03-09同期レプリケーション in PG9.1(PostgreSQL雑記)

                      なのでMySQLに「PostgreSQLみたいな同期レプリケーションはないの?」とか
                      PostgreSQLの人に「同期レプリケーションしているのに、スレーブで反映されていないタイミングがあるんです」
                      とか聞かないでくださいね(^_^;)

                      ちなみに非同期・同期レプリケーションがどの程度パフォーマンスに影響するかは、日経SYSTEMS 2011-11の「こちら検証ラボ PostgreSQL9.1はどう進化したのか」でNTTデータのHinemos開発チームが検証しているので、ご興味があるかたは参照してみてください。

                      [2017-11-17 追記]
                      PostgreSQLのレプリケーションはその後もバージョンアップとともに進化を続け、
                      PostgreSQL 9.6以降では一般的に「同期レプリケーション」といわれて想像するものと同じモードが追加されました。
                      詳細は以下のブログエントリをご参照ください。

                      PostgreSQL9.6以降同期レプリケーションは名前どおりのモード(synchronous_commit=remote_apply)あり!@PGECons勉強会 #1(キムラデービー)
                      | meijik | クロスデータベース | 18:01 | comments(0) | trackbacks(0) | - | - |
                       123456
                      78910111213
                      14151617181920
                      21222324252627
                      282930    
                      << June 2020 >>
                      + RECOMMEND
                      100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
                      100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

                      100人のうちの一人としてミックさんの本を推薦しています。
                      + RECOMMEND
                      MySQL 5.1 Plugin Development
                      MySQL 5.1 Plugin Development (JUGEMレビュー »)
                      Andrew Hutchings,Sergei Golubchik
                      MySQL 5.1 のプラグインを作るならこれ!
                      + RECOMMEND
                      AWKを256倍使うための本 (Ascii 256倍)
                      AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
                      志村 拓,鷲北 賢,西村 克信
                      ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
                      + RECOMMEND
                      Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
                      Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
                      松信 嘉範
                      Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
                      + RECOMMEND
                      + RECOMMEND
                      超・極める!MySQL
                      超・極める!MySQL (JUGEMレビュー »)
                      坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
                      内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
                      + RECOMMEND
                      The Root of .NET Framework
                      The Root of .NET Framework (JUGEMレビュー »)
                      荒井 省三
                      .NETの根っこをつかむ、か?
                      + RECOMMEND
                      エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
                      エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
                      奥野 幹也
                      これまでにない構築、そして構築後のMySQLのための本。
                      + RECOMMEND
                      Database Management Systems
                      Database Management Systems (JUGEMレビュー »)
                      Raghu Ramakrishnan,Johannes Gehrke
                      ミックさん連載の参考書籍です。
                      + RECOMMEND
                      Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
                      Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
                      W. Richard Stevens,Stephen A. Rago
                      必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
                      + RECOMMEND
                      + RECOMMEND
                      + RECOMMEND
                      Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
                      Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

                      DELL SX260の換装用に購入。今はコチラのほうが安いですね。
                      + RECOMMEND
                      情熱プログラマー ソフトウェア開発者の幸せな生き方
                      情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
                      Chad Fowler
                      OSC2010神戸に出展されたジュンク堂で買いました。
                      + RECOMMEND
                      Software Design 総集編 【2000~2009】(DVD付)
                      Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

                      メガトン級の過去記事。売り切れる前にお店に急げ!
                      + RECOMMEND
                      + RECOMMEND
                      玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
                      玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

                      Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
                      + RECOMMEND
                      + RECOMMEND
                      acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
                      acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

                      色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
                      + RECOMMEND
                      Firebird 徹底入門
                      Firebird 徹底入門 (JUGEMレビュー »)
                      木村 明治,はやし つとむ,坂井 恵
                      Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
                      + SELECTED ENTRIES
                      + RECENT COMMENTS
                      • たまたま「プリントヘッドの種類が違います」エラーから復活@MG6230
                        meijik (11/20)
                      • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
                        meijik (07/27)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        meijik (03/03)
                      • 2019年の木村明治
                        田中尚 (01/08)
                      • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
                        noname (12/10)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        Moriaki_ (01/05)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        Moriaki_ (01/05)
                      • 2015年版 InterBaseの歩み
                        nakagami (12/06)
                      • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
                        meijik (11/22)
                      • 分散DB本読書会第46回メモ「STOP AFTER 10」
                        masudahidehiko (09/01)
                      + RECENT TRACKBACK
                      + CATEGORIES
                      + ARCHIVES
                      + MOBILE
                      qrcode
                      + LINKS
                      + PROFILE