ZendFrameworkで実際どのようなクエリが生成されて
いるのかをチェックする場合
「__toString()」を使う。
$str = $select->__toString();
↑こんな感じで取得した文字列を取得して
書き出せばいい。
2012年05月07日
2012年04月02日
MySQLでCopying to tmp tableが出たら
プログラムが重かったので以前行ったMySQLのプロセス参照
をしてみた。
mysql> SHOW PROCESSLIST;
すると↓こんな表示を見つけた
「Copying to tmp table」
どうもインデックスが大きくなりすぎてメモリからディクスへ
データをコピーして処理してるみたい。
たぶん、Windowsの仮想メモリのような事をしてるのではないのかと。。
そりゃ処理が重いはずだ・・・
で、調べたらmy.confで以下の項目を追加すれば良いらしい。
max_heap_table_size = 256M
tmp_table_size = 256M
他にもメモリ周りの設定があるみたいなので、ここら辺を
ガリガリすれば結構軽くなるかも。
もちろんサーバ自体のメモリに余裕がなければいけませんが。。
をしてみた。
mysql> SHOW PROCESSLIST;
すると↓こんな表示を見つけた
「Copying to tmp table」
どうもインデックスが大きくなりすぎてメモリからディクスへ
データをコピーして処理してるみたい。
たぶん、Windowsの仮想メモリのような事をしてるのではないのかと。。
そりゃ処理が重いはずだ・・・
で、調べたらmy.confで以下の項目を追加すれば良いらしい。
max_heap_table_size = 256M
tmp_table_size = 256M
他にもメモリ周りの設定があるみたいなので、ここら辺を
ガリガリすれば結構軽くなるかも。
もちろんサーバ自体のメモリに余裕がなければいけませんが。。
2012年03月17日
MySQLにて「LEFT JOIN」した側のカラムのカウント
グループ化した時に「LEFT JOIN」した側のテーブルにあるカラムを
カウントしようと思ったがなかなか上手くいかない・・・
どうも「DISTINCT」という修飾子をつけてあげないといけない
らしい。
COUNT( DISTINCT x.id )
初歩的かもしれないけど、これでかなりハマった^^;
カウントしようと思ったがなかなか上手くいかない・・・
どうも「DISTINCT」という修飾子をつけてあげないといけない
らしい。
COUNT( DISTINCT x.id )
初歩的かもしれないけど、これでかなりハマった^^;
2012年03月06日
WindowsXPとWindows7の共有について
WindowsXP(32bit)からノートPCのWindows7(64bit)の共有フォルダに
アクセスしてファイルを転送していたら、どうしてもあるファイルを
コピーする時に、
「xxxxにアクセスできません。このネットワークリソースを使用する
アクセス許可がない可能性があります。」
というエラーが表示され、止まってしまう。
さらに、その後は共有フォルダすら覗けない状態になってしまいました・・・
共有の設定やIPの設定などイロイロやってみたのですが、「再起動すると
共有は復活するものの、コピー時に同じファイルでエラーが出る。」の
繰り返し・・・
どうやらNortonが原因のようでした。
↓下記のURLにある方法でレジストリを修正したら無事転送できました!
http://support.microsoft.com/kb/177078/ja
アクセスしてファイルを転送していたら、どうしてもあるファイルを
コピーする時に、
「xxxxにアクセスできません。このネットワークリソースを使用する
アクセス許可がない可能性があります。」
というエラーが表示され、止まってしまう。
さらに、その後は共有フォルダすら覗けない状態になってしまいました・・・
共有の設定やIPの設定などイロイロやってみたのですが、「再起動すると
共有は復活するものの、コピー時に同じファイルでエラーが出る。」の
繰り返し・・・
どうやらNortonが原因のようでした。
↓下記のURLにある方法でレジストリを修正したら無事転送できました!
http://support.microsoft.com/kb/177078/ja
2012年02月29日
MySQL SHOWコマンドでテーブルに設定したCommentも取得したい場合
SHOW COLUMNS FROM <テーブル名>;
↑これだとテーブルに設定したCommentは拾えない
Commentも拾うには↓このように「FULL」をつけてやる
必要がある。
SHOW FULL COLUMNS FROM <テーブル名>;
↑これだとテーブルに設定したCommentは拾えない
Commentも拾うには↓このように「FULL」をつけてやる
必要がある。
SHOW FULL COLUMNS FROM <テーブル名>;
2012年02月17日
MySQLで処理中のクエリを調べる
サイトが重い。
どうもデータベース周りが重いみたい。
topコマンドでみたらMySQLがめちゃめちゃCPU食ってる?!
という事でMySQLで今どのような処理をしているかを
下記のコマンドで調べる。
mysql> SHOW PROCESSLIST;
結果、サブクエリ使った処理が重くなっていました。
データが増えた事で再帰的処理の部分でものすごい負荷が
かかっちゃってたみたい。
このコマンド便利かも。。
どうもデータベース周りが重いみたい。
topコマンドでみたらMySQLがめちゃめちゃCPU食ってる?!
という事でMySQLで今どのような処理をしているかを
下記のコマンドで調べる。
mysql> SHOW PROCESSLIST;
結果、サブクエリ使った処理が重くなっていました。
データが増えた事で再帰的処理の部分でものすごい負荷が
かかっちゃってたみたい。
このコマンド便利かも。。
2012年01月17日
ZendFrameworkで日付時間バリデーション処理
ZendFrameworkでの日付時間のパリデーションの処理は
Formの要素使い時に以下のようにする。
Formの要素使い時に以下のようにする。
->addElement(
'Text',
'date',
array(
'label' => '日付時間',
'required' => true,
'validators' => array(
array(
'validator' => 'Date',
'options' => array('yyyy-MM-dd hh:ii'))
)
)
)
2011年12月30日
int型の許容範囲
facebookアプリで取得したidをMySQLに格納したら
「2147483647」という実際のIDとは違う数値が入ってしまう。
どうも、int型の許容範囲を超えてしまっているのが原因のようだ。
という事でMySQL側のIDフィールドの型を「bigint」に変更。
しかし、これでもまだおかしい・・・
探したらPHPのプログラム側にもintへキャストしている部分が
あった。
PHPのint型はそのプラットフォームにも依存するのだが、
10桁くらいが限界らしい。
お行儀良くキャストさせていたのが裏目に出た。
本来ならちゃんと型をそろえるべきなのでしょうが、今回は
仕方ないのでPHP側ではstring型として扱って、MySQL側では
bigint型として登録することにしました。
さすがFacebook。。まさかint型の許容範囲を超えるユーザー数
を抱えているとは・・・


「2147483647」という実際のIDとは違う数値が入ってしまう。
どうも、int型の許容範囲を超えてしまっているのが原因のようだ。
という事でMySQL側のIDフィールドの型を「bigint」に変更。
しかし、これでもまだおかしい・・・
探したらPHPのプログラム側にもintへキャストしている部分が
あった。
PHPのint型はそのプラットフォームにも依存するのだが、
10桁くらいが限界らしい。
お行儀良くキャストさせていたのが裏目に出た。
本来ならちゃんと型をそろえるべきなのでしょうが、今回は
仕方ないのでPHP側ではstring型として扱って、MySQL側では
bigint型として登録することにしました。
さすがFacebook。。まさかint型の許容範囲を超えるユーザー数
を抱えているとは・・・
2011年12月08日
ZendFrameworkのバリデータのエラー表示の多言語対応
Zend_Formとかで「validator」の検証時にエラーで日本語を表示させたい
と思い、以前はaddElementPrefixPathを使ってValidateクラスを再定義
していたのですが、よく見ると「resources」フォルダに言語ファイルが?!
調べてみたら初めから多言語対応していたのですね・・・
という事で、下記のようにZend_Validate_Abstractクラスに言語パスなど
を指定してあげれば多言語対応完了。
$translator = new Zend_Translate(
array(
'adapter' => 'array',
'content' => '/resources/languages',// ←言語ファイルへのパス
'locale' => 'ja',// ←言語指定
'scan' => Zend_Translate::LOCALE_DIRECTORY
)
);
Zend_Validate_Abstract::setDefaultTranslator($translator);
と思い、以前はaddElementPrefixPathを使ってValidateクラスを再定義
していたのですが、よく見ると「resources」フォルダに言語ファイルが?!
調べてみたら初めから多言語対応していたのですね・・・
という事で、下記のようにZend_Validate_Abstractクラスに言語パスなど
を指定してあげれば多言語対応完了。
$translator = new Zend_Translate(
array(
'adapter' => 'array',
'content' => '/resources/languages',// ←言語ファイルへのパス
'locale' => 'ja',// ←言語指定
'scan' => Zend_Translate::LOCALE_DIRECTORY
)
);
Zend_Validate_Abstract::setDefaultTranslator($translator);
2011年12月06日
ZendFrameworkでアクションメソッドの前処理
Controller内で下記のメソッドを定義
public function preDispatch()
↑アクションメソッドの処理前に実行したい「アクションで共通の処理」など
をここに書いておくと便利。
initメソッドよりは後に処理される。
また、アクションメソッドの処理後で実行したい場合は↓こちらを定義する
public function postDispatch()
public function preDispatch()
↑アクションメソッドの処理前に実行したい「アクションで共通の処理」など
をここに書いておくと便利。
initメソッドよりは後に処理される。
また、アクションメソッドの処理後で実行したい場合は↓こちらを定義する
public function postDispatch()


