2009-01-01から1年間の記事一覧

ハイパフォーマンスMySQL

sql

実践ハイパフォーマンスMySQLを読んでの備忘メモ。 Innodb 主キーはデータと一緒に、主キー順でレコードが保存される(=クラスタインデックス) セカンダリインデックスには主キーが保存されるので、2段階の検索になる 従って、以下に注意する必要がある 主…

MyBench.pm

ハイパフォーマンスMySQLの著者がつくったベンチマークツール wget http://jeremy.zawodny.com/mysql/mybench/mybench-1.0.tar.gz tar zxvf mybench-1.0.tar.gz cd mybench-1.0/ perl Makefile.PL make sudo make install でOK。 付属のbench_exampleは設定…

CPAN Search

自作。ブラウザにつけると便利。 javascript:d=document;w=window;t=''; if(d.selection){t=d.selection.createRange().text;} else if(d.getSelection){t=d.getSelection();} else if(w.getSelection){t=w.getSelection();}; if(t==""){t=w.prompt("Perl Mo…

screen

一度体験してしまうと、前に戻れない。 とりあえずの.screenrc escape ^Tt autodetach on caption always "%{= wb} %-w%{=bu dr}%n %t%{-}%+w %= %{=b wk} [%l] %{=b wb}%y/%m/%d(%D) %{=b wm}%c" defkanji euc encoding euc defencoding euc C-t S # リージ…

undefに注意

以下のテストコードではTRUEが出力される!!! if (my @tmp = undef) { print "TRUE\n"; } else { print "FALSE\n"; } サブルーチンでundef返すことがあるケースでは、wantarrayで呼び出し側のコンテキストを確認することが望ましそう。

シグナル

プロセス同士が互いに通信する手段の1つ。kill -lでリストできる。 kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 1…

入門

変数 シェル変数 x=1 echo $x でつくれる。参照するときには$が必要。 特殊変数 $0: スクリプト名 $1-9: 引数 $#: 引数の数 $@: ""で囲み引数を他のコマンドに渡せる $$: 現在のプロセス 演算 数値比較演算 -eq -ne -gt -ge -lt -le 例) if [ $# -ge 1 ] th…

覚えたコマンド

カーソル移動 1文字進む 1文字戻る 行頭 行末 1文字削除 killコマンド kill [pid] # TERM(停止) kill -9 [pid] # KILL(強制終了) kill -l # SIGのリスト sortコマンド Kotaro Ito kotaro@mail.jp Aotaro Zto zotaro@mail.jp Botaro Yto yotaro@mail.jp Co…

シェル変数・環境変数

シェル変数 シェルおよびその内部コマンドで使うもの 環境変数 実行環境を設定するグローバル変数 シェルが起動した外部コマンド、ユーティリティ、スクリプトから参照可 bashではシェル変数をexportすると環境変数になる コマンド setでシェル変数・環境変…

memcachedのベンチマーク

MySQLから取得するのと、memcachedから取得するのとどっちが速くなるのかベンチマークしてみた。 テーブルスキーマ Create Table: CREATE TABLE `data` ( `id` int(10) unsigned NOT NULL, `user_id` int(10) unsigned NOT NULL, `post_date` int(10) unsign…

memcachedをcentos4にインストール

http://blog.veryposi.info/server/server-setup/centos-yum-rpmforge/ http://blog.veryposi.info/server/server-setup/centos-memcache-yum/ http://centossrv.com/rpmforge.shtml を参考にしてやってみる。記事がなくなってしまうかもしれないので、コマ…

h2xsとmake

単体テストをきちんとやりたい、と思って色々探していたらこんな記事を発見。 http://www.sixapart.jp/techtalk/2007/02/how_to_make_perl_module.html まずMakeFile関連をきちんと調べておく。 h2xs -X -a -n Foo::Bar::Baz を実行すると、カレントにFoo-Ba…

MySQLのロック/トランザクション機構メモ

sql

実践ハイパフォーマンスMySQL を読んで、基礎を学習中。備忘のためにメモ。 ロックとエンジン MySQLにはストレージエンジンがいくつかあるが、それぞれ使うロック方式が決まっている。 下にいくほど並行処理に強いが、その分だけ処理のオーバーヘッドが発生…

fetchrow時の使用メモリ

topコマンドで調べてもよく分からんので、http://www.drk7.jp/MT/archives/000803.htmlを参考にDevel::Size::Reportを使って調べてみる。上記サイトによれば SCALAR 型のデータは、Integer 型である場合、最小で16byte のメモリを必要とする。以後、32bit 単…

暗号化モジュール

そもそも暗号化に詳しくないので調べるところから。 http://x68000.q-e-d.net/~68user/net/crypt-1.htmlが入門にはわかりやすかった。 超ばっくり基礎知識 共通鍵方式 暗号化/復号化に同じ鍵を使う 通信に使う際は、鍵を共有する方法が問題になる アルゴリズ…

特殊変数$@と$!

$@はdie、$!はシステムコールのエラー eval {die "test";}; print "\$\@: $@\n"; eval { `not exists` }; print "\$!: $!\n"; $@: test at test.pl line 6. $!: No such file or directory

ディレクトリ

opendir, readdir, closedirを使う。 以下はカレントディレクトリの.logファイルをすべて探してくる例 opendir(THISDIR '.') or die "cannot open dir . $!"; my @allfiles = grep { /\.log$/ and -f } readdir THISDIR; closedir THISDIR;

時間関数

Time::Pieceが便利。 標準関数のlocaltimeをオーバーライドし、Time::Pieceオブジェクトを返してくれる。 後方互換なので標準関数的な書き方でもOK。例えば、その日の00:00:00のunix timeが欲しいときはこんな感じで。 use Time::Local; use Time::Piece; my…

fork & Parallel::ForkManager

fork 標準関数のfork()の使い方。 use strict; if (my $pid = fork()) { # parent print "here is parent proces.\n"; } elsif ($pid == 0) { # child sleep(3); print "child process ends.\n"; exit 0; } else { die "fork error: $!" } print "parent pro…

MySQL wait_timeoutの挙動

sql

アイドル状態(最後の実行から何もしていない)がN秒続くとMySQLが勝手に接続を切るらしい。 このN秒を設定するのがwait_timeoutである。 まず、デフォルト設定を確認してみる。 mysql -uroot -e'show variables' | egrep '(wait)'; -------- wait_timeout 2…

MySQL maxconnections

CentOSだと設定場所は/etc/my.cnf [mysqld] max_connections=100 perlからDBI使って、DBハンドル取得&SELECTした時にどういう挙動をするのか調べてみた。 実験に使ったプログラム。 #!/usr/bin/perl use strict; use DBI; use Parallel::ForkManager; #適当…

ワンライナー

10回ループ for i in {0..10}; do echo $i; done; 無限ループ while true; echo ''; done 定期的にSQLの接続数を調べる while true; do mysqladmin -u root extended-status | egrep '(Max|Threads_)'; echo ''; sleep 3; done 検索 "span"という文字列を含…

覚えたこと

vim

入力補完 インサートモードで、, で入力補完できる! ファイルタイプ指定 例えば.tを開くときに :set filetype=perl runtimepathを調べる :set runtimepath makeでsyntaxチェック :set compiler perl :make syntaxエラーの箇所に移動 :cn :cp QuickFixウィン…

ファイルの途中から読み込み

vim

vi +/pattern file でfileをpatternで検索するというオプション付で開くことができる

調べたことメモ

sql

unixtime⇔timestamp相互変換 select UNIX_TIMESTAMP('2008-11-06 10:10:10') select FROM_UNIXTIME(1225933810) timestampから年月抽出(199907が出力される) SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); datetimeよりもintのほうが速い http:…

プレースホルダ

複数の値を列挙することができない。 具体的には以下のケース。 $ids = '1,2,3,4,5'; my $sth = $dbh->prepare(<<'SQL'); delete from tableA where id in (?) SQL $sth->execute($ids); 以下なら実行可能。 $ids = '1,2,3,4,5'; my $sth = $dbh->prepare(<<…

まとめてコメントアウト

vim

1.対象範囲をビジュアルモード(Ctrl+v)で選択。 2.大文字「I(アイ)」を入力 3.先頭に追加したい文字列を入力(Perlなら#) 4.Esc

時間系の関数

エポック(1970/1/1 00:00:00 UTC)からの秒数を返す time(); 現地時間からエポックタイムを返す(あくまでも1970/1/1 00:00:00 UTCからの秒数) use Time::Local; timelocal(0, 30, 17, 5, 10-1, 2009-1900); time関数が返す形式をローカル時間のリストに変…

調べたことメモ

nice スケジュール優先度を変更して与えられたcommandを実行する。 デフォルトの優先度は10。 nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [command [arg...]]

FileBaseName

File::Basenameは標準モジュールで、basename関数でスクリプト名を取得可。 use strict; use File::Basename; use TmpKotaro; print "$0\n"; print basename($0)."\n"; print TmpKotaro::test()."\n"; 特殊変数$0にはあくまで実行しているスクリプト名が入る…