あるソフトウェアエンジニアの戯言

日々の開発やサーバ管理のなかで出てきたあれや、これや、あんなことや、こんなこと

この記事のキーワード:   Database   SQLite   perl

通常、sqlで複数のプロセスから同一のデータベースを操作する場合、auto commitモードを使用しないのであれば、transactionを使用することになるが、sqlite3でtransactionを使用する場合、同時にデータベースにロックがかかり、他のプロセスから書込がブロックされる(読み出しはできる)。

この場合の挙動は以下のようになる。

  1. begin work を実行した時点ではロックはかからない
  2. begin work を実行したあと、select, insert, update 等なんらかのコマンドを実行した時点でデータベースがロックされ、他のプロセスからの書込がブロックされる。
  3. commitまたはrollback を実行すると、ロックは解除され、他のプロセスに対するブロックも解除される。

perlのDBIを使用した場合も同様で、AutoCommitモードをundefで利用する場合は注意が必要。

  • AutoCommit=undefの場合、データベースにconnectした時点および、commit, rollbackを発行した時点で、次のbegin work が自動的に発行されるため、ひとつでもコマンドを発行すると、データベースがロックされてしまう

結論

  • sqlite3をfcgi等、長期間永続するconnectionで利用する場合は、AutoCommitモードを通常onにし、必要な部分のみbegin_work-commit/rollbackでtransactionを利用する。
  • もし、AutoCommitモードoffで利用する場合は、適宜 rollback を発行してデータベースのロック状態を解除するようにする。
この記事のキーワード:   linux

フォントの埋め込まれていない日本語PDFをAcrobatReaderで表示しようとしたときにダイアログが表示され、「日本語フォントをインストールしてください」と言われることがある。
これはlinuxのXにmsgothic.ttfがインストールされている場合に起きるらしい。(Linux版Adobe Reader 9で日本語が表示できない問題の解決法)

これは環境変数 ACRO_DISABLE_FONT_CONFIG=1 を設定してやることで、回避することができる。

この記事のキーワード:   ActionScript   emacs   flash

flash の外部スクリプトファイル(Action Script)をemacsのデフォルトutf-8エンコードで保存すると、flashは正常に読み込みできません。
エンコーディングを utf-8-with-signature (utf-8BOMつき) で保存する必要があります。

備忘録がわりに。

この記事のキーワード:   64bit   debian   google

sid の googleearth-package が新しくなったので、最新のGoogleEarthをインストールしてみたのだが、3Dの部分が表示されない。
原因は、nvidia-glx-ia32がインストールされていないことだった様子。(もちろん、グラフィックドライバがnvidiaであることが前提)

キーワードリスト

バックナンバー