PHPで処理が遅くなる

PHPで処理をしているときに、データ量がある一定を超えたあたりから極端に処理速度が遅くなってきました。

処理の流れとしては、

1.MySQLよりデータの抽出

2.抽出したデータを全て配列aに格納

3.配列aに対して処理をして別の配列bに格納

という処理です。

データ量が数万、数十万件あたりまでは問題なかったのですが、百万件近くになったときに著しく処理が遅くなってきました。

まず、各箇所で処理時間を計測してみました。

すると、3の処理をしているときに徐々に処理時間が遅くなってくることが分かりました。

??と思っていろいろと検討してみた結果、まず1のMySQLの結果リソースの解放をする。

その次の3で配列aについても解放をする。

データが少ないときはとりあえず乗り切れているんでしょうけど、データが肥大化するに伴い今回のようなことが発生することが分かりました。

恐らく、「そんなことは設計段階で把握しておかないと」って怒られそうですが、また一つ勉強になりました。

「使わないものは、片づけをする」←人として基本ですよね。

 

パーソナルユースで1TBって・・・・

個人向け商品ですよね、これって。

とうとうパーソナルユース向けで1TB。

しかも手のひらサイズって、持ち運びするの?

バッファローは、コンパクトサイズで1テラバイトの大容量を実現したネットワーク対応ハードディスク(HDD)”LinkStation Mini(リンク・ステーション ミニ)”「LS-WS1.0TGL/R1」を発売する。

続きを読む

MySQLチューニング

MySQLって軽快な動作をすると評判らしいのですが、チューニングをしてあげないと意味がないんですね。

最初はデフォルトの状態で運用していたのですが、レコード数が増えるにしたがって遅くなってしまう。そこで、いろいろと調べると設定ファイルを調整してあげれば格段に軽快な動作をするようになりました。

以下は私が設定した例です。

※設定はあくまで例です。参考程度にして下さい。

#スロークエリログ設定
log-slow-queries
long-query-time=30
log-long-format

#SELECT文をキャッシュ
query_cache_size=32M

#インデックスを用いないテーブル結合のときに使われるメモリ上の領域
join_buffer_size=8M
#インデックスを用いないテーブルスキャンのときに使われるメモリ上の領域
read_buffer_size=8M
#ソート後にレコードを読むときに使われるメモリ上の領域です。
#ディスクI/Oが減るのでORDER BYの性能向上が期待できます。
read_rnd_buffer_size=32M
#最大コネクション数
max_connections=50

#メモリに余裕がある場合に指定。検索に使われるインデックスをバッファに保存する際のメモリサイズ
key_buffer=32M
#入力データ保持のための最大バッファサイズ。画像など、大きなデータ挿入でこの制限に引っ掛かる可能性がある
max_allowed_packet=1M
#頻繁なアクセスに対し、データのキャッシュでディスクのI/O負荷を減らす場合に使用
table_cache=256
#頻繁なアクセスに対し、データのキャッシュでディスクのI/O負荷を減らす場合に使用
sort_buffer_size=16M
#値を大きくすることでインデックスを含まないクエリーの実行速度を上げる
record_buffer=1M

# スレッドの作成,削除は負荷が大きい.
# Threads_Createdの動きを見ながら変更.
thread_cache=16

# You can write your other MySQL server options here
#                                  Datafile(s) must be able to
#                                  hold your data and indexes.
#                                  Make sure you have enough
#                                  free disk space.
innodb_data_file_path = ibdata1:100M:autoextend:max:10000M
# InnoDBはOSキャッシュを使用しないため,全メモリの70-80%を当てると良い.
innodb_buffer_pool_size =128M
#InnoDBの内部データなどを保持するための領域
innodb_additional_mem_pool_size=10M

 

その他に「ここも設定したほうがいい」という項目があったら教えてください。

 

WEBプログラマにはHTMLは必須スキルです

今はSEとしてやっていますけど、今の仕事に就く前はハード系の仕事してました。
転職時はWEBプログラマになろうとPHPを覚えていましたけど、PHPのコードを書くのにHTMLの知識って必須なんですよね。
PHPで処理をしても結局HTMLで表示しますから。
とりあえずHTMLの入門書はいろいろと読んできました。
ある程度デザインを考えるとスタイルシートについても覚えないといけなくて、結構大変でした。
デザインスキルがあればWEBデザイナもこなせるんでしょうけどorz

とりあえず一通りHTMLの構造を覚えた後、今でも利用しているのが「ポケットリファレンス」シリーズですね。これは手元においても邪魔にならない大きさですし、必要なことはほとんど掲載しているんで、PHP本と並べて置いています。

PHP入門したあとは・・・・

PHPの入門書を紹介しましたが、入門したあとに手にしておいた本はこれです。

「PHP ポケットリファレンス」

このシリーズは結構役に立っています。

「なんだ、そんなの買わなくてもWEBで探せばあるよ」って思っている人もいるでしょう。

でも、WEBページよりもアナログ的な紙ベースの方が格段に探しやすいです。

ただ、紙ベースの難点は更新されないことぐらい。

入門したあと、自分でプログラムを考えて構築するには是非片手に持っていて損はないと思いますよ。

 

PHP入門書

私はもともとプログラムの経験はほとんどなく学生時代にC言語をかじった程度でした。

今は主にPHPを使っているのですが、独学です。

そんな入門書として最適なのが

最初は10日でほんとにって感じですが、意外に簡単に覚えることができます。

なにより段階を踏んでいるのと、難しいところは無視しているような内容が挫折しないで読める、試せるという感じでした。

あくまで入門書なので「PHPとは」という触りの部分だけですが、とっかかりは非常によかったです。

これからPHPを独学で始めてみようという人にはオススメです。