タグ

ブックマーク / blog.nekokak.org (11)

  • RENAME TABLEでカジュアルな運用 @mysql-casual#15 - blog.nekokak.org

    やぁ。可愛いアイコンでお馴染みの@nekokakだよ。 mysql-casualとか言ってるけどカジュアルな記事が@oinumeさんくらいしかないよね。 ドン引きだね'`,、('∀`) '`,、 ということでガクンと敷居を下げようって感じで超絶カジュアルな話をしてみようと思うんだ。 カジュアル運用していると、「あれなんかこのテーブルまじレコード数おおすぎね?」 とかあるあるですよね。 そこでカジュアルにcountして見るわけです。 InnoDBのテーブルになのにそれもmsaterに対して。 カジュアルですね。 mysql> select count(*) from accesslog; +----------+ | count(*) | +----------+ | 11676738 | +----------+ 1 row in set (1 min 36.99 sec)1分半くらいかか

    hiboma
    hiboma 2011/12/15
    ('∀`)
  • 実行時に使用したメモリを取得する幾つかの方法 - blog.nekokak.org

    あんまこういうの詳しくないので、詳しい人に教えてもらいたいのですが、 Perlのプログラムでどれだけメモリを消費したか確認するのに幾つか方法があると思います。 今回はwebアプリで1リクエスト毎に消費したメモリを取得したい感じ。 自分が知ってる方法は 1:Plack::Middleware::Debug::Memoryでやってるようにpsを叩いてメモリを取る my $out = `ps -o rss= -p $$`; $out =~ s/^\s*|\s*$//gs;こういうやつ。 2:Devel::Mallinfoを使う Devel::Mallinfoを使えばmallinfoが取得できるので、mallocされたサイズを取得できるので 開始と終了でmallinfoをとって差分を出せばプロセス中にどれくらいメモリを消費したかが分かる。 #! /usr/bin/perl use strict;

  • MySQueue

    またか!って感じなんですが、MySQL前提で動作するJobQueueをかるく実装してみました。 https://github.com/nekokak/MySQueue よくあるJobQueueは1つのjobをdequeueして処理しますが、 今回作ったMySQueueは自分の指定したボリュームのjobをまとめて取得して処理する感じです。 workerをタンマリ用意してマシンガンのようにバシバシjobを処理するというよりも 大砲のようにどかーんどかーんとjobを処理する感じです。 なのであんまり並列性はいらないかんじ。(当然ある程度はいるけど) わかりやすい説明ですね。 Schema: CREATE TABLE job ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, arg MEDIUMBLOB, status VARCHAR(10) DE

    hiboma
    hiboma 2011/04/19
    event_scheduler
  • OSXにHandlerSocketを入れる

    最近HandlerSocketの検証で手元のOSXにいれてみたので、その時の手順纏め。 MySQLはhomebrewでinstallしていることが前提 (いまさらmac portsはないよね?) homebrewでインストールすると ~/Library/Caches/Homebrewにinstallするときに使ったMySQLのソースコードがtar.gzでそのままあるので、 それをどっかの作業ディレクトリにコピーしましょう。 コーピーしたら、tarを解凍してconfigureします $ ./configure --prefix=/usr/local LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include --with-mysql=/tmp/mysql-5.1.55 CFLAGS="-I/usr/local/include/mysql -I

  • O/R Mapper についてかんがえてみた

    元ネタ)http://d.hatena.ne.jp/tokuhirom/20110104/1294170319 昔良くORMを使うことのメリットは SQLを書かなくてよくなる。 つまりプログラマはSQL脳が低いからプログラマにSQLを書かせない。 プログラム中にSQLという別の概念がはいってくるとコードが読み難くなる。 バックエンドのRDBMSの差異を吸収してくれるからバックエンドを気にする必要がない。 さらに、バックエンドのRDBMSを簡単に取替え可能。 プログラマブルにSQLを組み立てしたい。 などと言われることが多いんじゃないでしょうかね。 個人的には最後の「プログラマブルにSQLを組み立てしたい」と言う要件以外は全部 間違っていると思います。 イカ全て自分の視点なだけなので違う意見もあるであろうことを承知で言い切ります。 SQLを書かなくてよくなる。つまりプログラマはSQL脳が低い

    hiboma
    hiboma 2011/01/05
  • Sub::Argsで存在しないキーにアクセスしたらエラーに

    前回Smart::Argsを紹介したときに、 http://blog.nekokak.org/show?guid=YOPjaCIM4BGd0gUxMSAp_g use strictしててもhashのキーを間違った場合、普通に処理できてしまい 間違いに気づかないわけです。 use fieldsつかえば回避できるんですが、 いまどきuse fieldsを使ってるのはbradだけという噂もあるので、 Smart::Args使っとけって感じです。と、書いたわけですが、Sub::Argsの0.05をつかえば package Your::Class; use Sub::Args; sub foo { my $class = shift; my $args = args( +{ fh => 1, bucket => 0, ext => 0, } ); $args->{exf}; # oops } p

    hiboma
    hiboma 2010/12/22
    Internals::SvREADONLY
  • Smart::Argsの素晴らしいところ

    Sub::Argsというものを作っていながら、 Smart::Argsを紹介します。 一言でいうとSmart::Argsの良さは型チェックができるとかそんなことではなく、 argumentsをhashと同じキー名の変数でうけとれることでしょう。 サンプルコード use strict; use warnings; package Your::Class; use Smart::Args; sub foo { args my $self, my $fh, my $bucket => {optional => 1}, my $ext => {optional => 1}, ; } package main; foo(fh => $fh, bucket => $bucket, ext => $ext); # or foo({fh => $fh, bucket => $bucket, ext =>

    hiboma
    hiboma 2010/12/21
    愛用ちう /// 型チェックは冗長とかって意見もあるかと思いますが、簡易のドキュメント・コメントとして利用してます
  • プロジェクト開発におけるテスト用DBの(使い|作り)方

    昔書いたような気がしてたけど書いてなかったので。 モジュールをつくっていてDB回りのテストを書きたい場合は Test::mysqldやTest::postgresql を使うこと。 CPANなんかに上げるモジュールではなく、お仕事プロジェクトのコードを書いていて DB回りのテストを書きたいケースについてです。 私はMySQLを利用しているので、Test::mysqldをつかってもよいのですが、 起動コストがそれなりにかかるのと、ローカルの開発環境には既にMySQLは立ち上がっている前提があるので、 既に立ち上がっているMySQLをそのまま利用する方法をとっています。 そこでテスト用のユーティリティクラスを紹介してみます。 package t::Utils; use strict; use warnings; use utf8; use lib './t/'; use Test::Fixtu

    hiboma
    hiboma 2010/12/15
    あるある > テストがこけた時とかにちょっと参照するとかも簡単ですね!
  • DBIx::TransactionManager

    というのを書きました。 https://github.com/nekokak/p5-DBIx-TransactionManager まぁ、DBIx::Skinnyで使っているトランザクションの仕組みを別モジュールに切り出した感じです。 use DBI; use DBIx::TransactionManager; my $dbh = DBI->connect('dbi:SQLite:'); my $tm = DBIx::TransactionManager->new($dbh); { my $txn = $tm->txn_scope; $dbh->do("insert into foo (id, var) values (1,'baz')"); { my $txn2 = $tm->txn_scope; $dbh->do("insert into foo (id, var) values (

  • Jonkという名のJobTankingミドルウエア

    JobQueueManagerについて で書いていたシンプルなjob管理の仕組みを作ってみました。 https://github.com/nekokak/p5-Jonk 使い方はこんな感じ。 use Jonk; my $dbh = DBI->connect(...); # enqueue job { my $jonk = Jonk->new($dbh); $jonk->enqueue('MyWorker', 'arg'); } # dequeue job { my $jonk = Jonk->new($dbh, {funcs => ['MyWorker']}); my $job = $jonk->dequeue; print $job->{func}; # MyWorker print $job->{arg}; # arg }Jonkはなにもやりません。jobをRDBMSに貯める以外は。

    hiboma
    hiboma 2010/11/22
  • メモリ使用量の確認

    サーバのメモリが思った以上に消費していたのでサックリ調べてたのですが 各プロセスのメモリ使用状況の調べ方としては ps aux --sort=-rss | head -40とやるとRSSのサイズでソートしてくれるのでheadとかでみてやればメモリ使用量が多い順に参照可能。 ただたんにps auxしただけだと見るのがしんどい。 topでもshift+Mで同じ感じでみれるのでそれでも良い。 (cを入力してプロセスの詳細を表示するとなおよい) あとはCoWに乗ってるかを調べたが、 http://d.hatena.ne.jp/naoya/20080212/1202830671 naoyaさんが紹介されている方法そのまんまでよいでしょう。 sudoして実行すること。 Cowはアプリの質にもよるが基的にはライブラリが共有メモリに乗ってればいいから アプリの質をみつつsharedなパーセントを調整出

    hiboma
    hiboma 2010/11/10
    rssの値にはsharedなメモリの値も含まれてると思うので、preforkなデーモンだったりすると実際の値より大きめになってしまうのかなと。
  • 1