URLの最大文字数

URLの最大文字数の制限について、改めて調べてみました。
URIではなく、URLについて。

URLなのでHTTPだろう、ということでRFC 2616をチェック。すると・・・

The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.

[Read More]
OpenX 

PHPをAPCで高速化

OpenXで広告配信システムを構築したとき、APCの導入で負荷が1/100くらいに下がったのでメモ。
LoadAverage60→0.6になりました。
導入は簡単です。

# pecl install APC
でokです。
php.iniに設定を追加して完了。
[apc]
extension=apc.so
apc.enabled=1
apc.optimization=1
apc.ttl=10
apc.gc_ttl=10
apc.shm_size=96
ポイントは、apc.shm_sizeを大きめにとらないとgcが正常に動作しないようです。
apc.shm_sizeが足りないと、apacheのエラーログに
[Mon Oct 10 08:15:45 2008] [apc-warning] GC cache entry '/var/www/openx/var/cache/deliverycache_1184f8a13xxx4b67eb68c969e9e5740.php' (dev=64769 ino=0) was on gc-list for 2852984 seconds
なんてのが出続けます。。。

[Read More]

[OpenXチューニング]MySQL物理データファイルのサイズ

OpenXでのMySQLチューニングの話

OpenXの場合、impressionをinsertでMySQLに記録するため
物理データファイルのサイズを小さく保つことが大事になります。

特に、インプレッションを記録する
ox_data_raw_ad_impression
テーブルのサイズが重要です。

実数はI/O性能によるので参考にしかなりませんが、
経験的にはデータファイルが800MBを超えたあたりから
急に性能が落ちてきます。

メンテナンススクリプトがテーブルをロックするので、
メンテナンススクリプトの処理時間が長いと
配信が遅延する原因になります。。。
また、データファイルが大きいと
配信自体(ox_data_raw_ad_impressionテーブルへのinsert)自体の
性能も低下する感じです。

と、いうわけで、

  1. 生データ保持期間を短くする
  2. (小さくできれば)データファイルを小さくする
という2つがポイントになります。

生データ保持期間を短くする
OpenXの管理画面で設定します。
ログイン ⇒ Administrator account ⇒ マイアカウント ⇒ 全般設定 ⇒ メンテナンス設定
集計後、統計情報の元データを削除しますか にチェック
統計情報を削除するまでの猶予期間(秒)  を設定
実際にデータが削除されるのは
メンテナンススクリプト(定期メンテナンス or 自動メンテナンス)が
実行されるタイミングです。
データファイルを小さくできるか調べる
show table statusで調査できます。
Data_freeが大きい場合、小さくする余地ありです。
mysql> show table status where name like 'ox_data_raw_ad_impression' \G;
データファイルを小さくする
データファイルが大きくなりすぎた場合、
PostgreSQLならVACUUMコマンドで対応しますが
MySQLの場合はOPTIMIZE TABLE句で対応します。
mysql> OPTIMIZE NO_WRITE_TO_BINLOG TABLE ox_data_raw_ad_impression;
分速80MBくらいのスローペースで、テーブルにロックがかかるので、
頻繁に実施するか/まとめて実施するかは
システムの特性にあわせて選択するのがよいと思います。

[Read More]