タグ

ブックマーク / blog.katty.in (3)

  • ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動

    整合性をしっかりとらないといけない処理ではトランザクションをかけるのですが、どうもトランザクションのロック待ちでタイムアウトしてしまうことがあるようです。 java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction トランザクションでテーブル全体にロックがかかってしまう 要するに、「トランザクションを実行するためにロックを獲得しなければいけないが、他のコネクションがロックを握っていて、ロックが獲得できない」ということです。 これの根的な原因は何かと調べますと、InnoDBでトランザクションを使用するときに、行ロックではなく、テーブル全体にロックがかかってしまう場合がある、というところにたどり着きました。 「InnoDBで行ロック/テーブルロックになる条件」を見ながら、少し試してみます。 テーブ

    ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動
  • Tomcatのログをローテートさせて一定期間で削除する。

    Tomcatのアクセスログが膨らむので、早めに捨ててしまいたいなあ、と思いしました。 ログは定期的にログサーバに転送しているので、アプリケーションサーバ用のホストに残しておく必要はないという状況です。 logrotateの設定 パッケージ管理ツールでインストールしているTomcatなんですが、標準出力とエラー出力のログであるcatalina.outはもともとローテートの設定が入っていました。 vim /etc/logrotate.d/tomcat7 もともと1年くらい残す設定になっていたんですが、1週間くらいで破棄するようにします。 /var/log/tomcat7/catalina.out /var/log/tomcat7/access_log.txt { copytruncate daily rotate 7 compress missingok create 0644 tomcat

    Tomcatのログをローテートさせて一定期間で削除する。
  • PHPで複数の変数をまとめて連想配列にする関数compact

    使い方によってはめちゃくちゃ便利なPHPの関数compactについて。 PHP: compact – Manual ※ このブログは、 PHPで連想配列を複数の変数に展開する関数extract と対になっています。 compactは一言で説明すると、「複数の変数をまとめて連想配列にする関数」です。 変数をまとめて連想配列にしたい時にどうするかというと、こんな普通に変数名をキーに、変数自体を値にして指定していきますよね。 $array = array( 'user_id' => $user_id, 'screen_name' => $screen_name, 'age' => $age ); これを勝手にやってくれるのがcompact compact関数を使うと同様のことが1行で書けます。(上のarrayも1行といえば1行ですが・・・) $array = compact('user_id',

    PHPで複数の変数をまとめて連想配列にする関数compact
    mfham
    mfham 2013/01/15
  • 1