MySQLがレプリケーション遅延がALTERで治った

ある特定のテーブルに対するレプリケーションの遅延時間が、ここ数ヶ月間どんどん長くなり、場合によっては10分以上(!?)という状態になっていて困っていました。 データ量や更新頻度は、テーブルを作成した時とほぼ同じなのにどうして!と思って調べてい…

外部CSSの中で画像パスを指定する時の注意

CSS

かなり初歩的なことですが、少しはまってしまったのでメモ。 以下のようにファイルが配置されているケースで、 /sample /img/iPad2.jpg /css/sample.css sample.html 外部CSS(sample.css)から、画像(iPad2.jpg)を参照する場合、以下の書き方では参照でき…

ImageMagickを使って画像をリサイズ

携帯で撮影された画像を投稿できる機能を実装しようと考えた場合、画像のファイルサイズに気をつけなければなりません。 最近の携帯のデジカメの画像サイズは、500KByteくらいのものが多く、そのまま画面表示すると、容量オーバーで画面自体が表示できない危…

SQLでの日付条件に注意

DB

以下のエントリーを読んでいて、過去に自分もハマッたなあと思ったのでメモ。ヒビコレショウジン - フレームワーク開発時代のSQLチューニング基礎(2)SQLのやっちゃだめ前編 について確認してみた ※ほとんど引用のみになっちゃいました。。 SELECT empno, …

Pgpool接続を強制切断すると

pgpool.logに下記のようなログがいっぱい出力された〜 ERROR: ・・・ read_startup_packet: incorrect packet length (-465498) ERROR: ・・・ read_startup_packet: out of memory これは、接続が不正に接続された場合に出力されるエラーのようで、今回は、…

Pgpoolのプロセスについて

PostgreSQLのプロセスを確認しようとしてpsコマンド打ったら、以下のようなプロセスが大量に出てビビッてしまった。。でもよく見ると、これは「pgpool」のプロセスじゃないか。。起動ユーザが「postgres」というOSユーザなだけw [root]# ps -aef | grep pos…

PHPでUnixタイムスタンプをミリ秒で取得

PHP

PHPで、ミリ秒の取得する関数って無いのね。。。microtime()でやるしかないか。 time() 秒単位で取得 microtime() マイクロ秒単位で取得 これだと扱いにくい。*1 echo microtime(); 0.74204900 1297317486 ← [マイクロ秒](スペース)[秒] という形式 とりあえ…

メールデータの構造

メールデータの構造について調べたのでまとめてみます。 メールは全てただのテキストデータ メールデータを理解する上で、最も重要なのは以下の1文です。以下で書かれている「テキスト」とは、ASCIIコード*1のことです。 インターネットメールは、もともとテ…

ホストcookieとドメインcookie

たいした話じゃないのですが、ちょっと調べてしまったのでメモ。 下記のようなHTTPレスポンスヘッダーが返却された場合、 Set-Cookie: aaa=111; expires=Tue, 31-Dec-2030 23:59:59 GMT; path=/; Set-Cookie: bbb=222; expires=Tue, 31-Dec-2030 23:59:59 GM…

syslogで長いメッセージは出力できない

「syslog出力したメッセージが、途中で切れてしまった!」という話があったので、ここにメモ。 その原因は単純で「メッセージが長すぎた」ことです。以下の通り、syslogプロトコルでは、メッセージは1024バイトまでなのです。 パケット全体の長さは、1024バ…

JavaでOSのコマンドを実行したい時は

Javaでバッチ開発をしていると、OSのコマンドを使いたくなるシーンがあります。例えば、以下のような場合などです。 ls コマンドで対象ディレクトリのファイル一覧を取得したい ping コマンドで、通信先サーバの状況確認をしたい そのような時に用いられるの…

JavaScriptの setTimeout関数の実行タイミングに関する誤解

JavaScriptの「setTimeout」は、(ミリ秒で)指定した時間後に、指定した関数を実行してくれるのですが、実は実行タイミングがややこしい!のです。私も誤解していました。 例えば、下記を実行すると、どうなるでしょうか? document.write("hoge\n"); setTi…

Javaの「可変長引数」

J2SE 5.0の新機能として追加された、「可変長引数」は普段あまり利用しませんが、共通メソッドに、任意の数のオプションを引数として渡せるようにしたい場合などに便利だと思います。 まず、「可変長引数」とは何かという話ですが、文字通り、あるメソッドの…

Slony-Iを停止させずにテーブルを追加する

Slony-Iを用いた非同期レプリケーションを構築している環境で、テーブル追加をする場合、やや面倒な手順を踏まないといけません。このあたりはMySQLのレプリケーションに劣るところですね。 手順の概要 Slony-I環境にテーブルを追加するには、以下の手順を実…

進捗管理ってどうしたらいいんだろうか

数年前から、PJリーダーとして仕事をすることが多くなり、「進捗管理」で悩むことが多かったのですが、以下の記事を読んで、少し光明が見えた気がしたので、忘れないように書いておこうと思います。 SEの残業しない仕事術 : モニタリング&コントロール(1…

MySQLのクエリキャッシュについて

今まで、MySQLのクエリキャッシュを利用することに何の懸念も持っていなかったのだけど、以下のような意見があり、今後は少し気をつけようと思っています。 確かにヒット率という観点でみると、エンドユーザ向けのWebサービスでは、意味が無さそう。 今までM…

FTP用ユーザの作成時の考慮点

FTP用のユーザを作成する時に考慮すべきポイントは、以下の2つです。 シェルログインを不可に設定 homeディレクトリをFTP用ディレクトリに変更 シェルログインを不可に設定 この設定は、セキュリティの観点で必要な設定です。 FTP用ユーザにまで、ログインさ…

PgpoolでのPreparedStatementのDEALLOCATE問題

Pgpool(ver 2.3.3)を使っていて、たまにDEALLOCATE*1に関するエラーが発生するので調査していました。 状況 Pgpoolログに、「DEALLOCATE pdo_stmt_00000001 message: prepared statement "pdo_stmt_00000001" does not exist」とエラー出力される PostgreSQL…

Apacheで圧縮してコンテンツ配信しよう

最近、スマートフォン向けのサイトなどが多くなりつつありますが、スマートフォンの場合、「(携帯キャリアの3G回線などの)細い回線」かつ「(JavaScriptなどを含んだ)リッチコンテンツ」という事情から、コンテンツのダウンロードが重く感じるということ…

CakePHPで複数テーブルに対するトランザクションを使う場合

CakePHPでトランザクションを使用する必要があったのですが、一般的に用いられている方法だと、複数のテーブルを1つのトランザクションとして更新したい場合、コントローラ内での実装がとても分かりにくくなると感じ、異なる実装方法をとってみたので、ご紹…

プロセス確認に便利なコマンド

プロセス確認する時、こんな感じでgrepしたりしますよね。でも若干面倒ですね。 [root]# ps -aef | grep httpd | grep -v grep そこで、「pgrep」コマンドを使います。 [root]# pgrep -lf httpd 1890 /usr/local/apache2/bin/httpd -f /usr/local/apache2/co…

PostgreSQLでエスケープ文字を利用する場合の注意

以下の例のように「nonstandard use of \\ in a string literal」とかログに出ててビビッた。 SELECT position ( 'C:\\\\aaa/bbb/sample.txt' in '\\\\' ) FROM hoge message: nonstandard use of \\ in a string literal 下記、引用の通り、エスケープ文字…

Linux環境下でのパフォーマンス問題調査

今、仕事で使っているパッケージ製品で、どうにもまったりと遅い画面操作があることに気付いたので、調査していました。今後の自分の参考情報として、作業記録を残しておくことにしました。 まずはtopコマンドで確認 OSのリソース状況確認をすれば、およそ検…

MySQLに重いSQLを投げて、帰って来ない時は

重い集計SQLなんかを実行したけど、いつまでたっても帰ってこない時の対処についてです。 まずは、topコマンドで確認します。大抵、以下の例のように、mysqldがリソースを使い切っています。 [root]# top top - 16:20:17 up 15 days, 6:50, 1 user, load ave…

cronの設定ファイルについて

バッチなどの自動実行でよく使うcronですが、実行ユーザ単位で設定すると思います。それらの情報は、下記のように「/var/spool/cron」配下にユーザ単位で保存されています。中身はcronの設定内容が記述されたテキストファイルです。 [root]# cd /var/spool/c…

よく使うPHPのコマンドラインオプション

個人的によく使う、PHPのコマンドラインオプションをまとめておきます。参考URL:サービス終了のお知らせ PHPのバージョンを確認 (php -v, php --version) [実行例] [root]# php -v PHP 5.2.9 (cli) (built: May 14 2009 20:58:31) Copyright (c) 1997-200…

PHPで一意な値を生成する

MySQLのレプリケーションのように、ステートメントベースのレプリケーションの場合には、auto_incrementなどの実行時に値が不定な関数は利用が推奨されません。従って、プログラム側で、一意となる値を生成する必要があります。そのような場合、PHPでは、以…

PostgreSQLでの「canceling autovacuum task」ログについて

PostgreSQLのログに、下記のエラーが出たので、調査してました。 ERROR: canceling autovacuum taskでも、「エラーではなく、あくまでキャンセル」とのことなので、気にすることはなさそう。*1原因としては、以下が想定できますが、頻繁に監視にひっかかると…

画像の上に自由に文字を配置する

こちら 「画像上の自由な位置に文字を重ねる方法 [ホームページ作成] All About」 を参考にまとめてみます。 実現方法のポイント スタイルシートの positionプロパティを利用 画像には、「position: relative;」を指定*1 文字には、「position: absolute;」…

viで行番号を表示

vi 実行中に以下の設定を行うと、行番号が表示されるようになります。 :set number 以下、実行結果の例です。 1 # 2 # This is the main Apache HTTP server configuration file. It contains the 3 # configuration directives that give the server its in…