プロフィール

けい

Author:けい
公開したWebサービス・アプリ一覧はこちら

※2014年12月、私が個人で開発したWebサービス・アプリへの
累計アクセス数は8億を超えました。
負荷対策頑張ります。日々精進していきます!!


■■■ 業務経歴 ■■■
社会人1年目:携帯電話開発。画面周りを1年間
2年目 :海外向け携帯電話ミドルウェア開発
     ブラウザとプロトコルスタック周り
2年目後半~:携帯電話の通信専用チップ開発
3年目:カーナビ。画面周りの開発
3年目後半~:BDビデオカメラ
     組み込みLinux カーネルと
     ドライバの開発。
4年目12月:プロジェクト途中で退社
~ここまではC、またはC++で開発~

~ここからJavaがメインの開発~
4年目1月:Web系の会社に転職
       ~4ヶ月間の研修
5年目5月:製造業向け生産管理システム開発
6年目9月:証券会社向けシステム開発
7年目10月~携帯電話向けコミックサイトの運用・開発
8年目12月:プロジェクト途中で退社

~ここからPHPがメインの開発~
8年目1月~仲介手数料が無料の不動産屋の社内SEに転職
交渉しほぼ完全に裁量労働が可能な立場になる。
業務内容はシステム全般ですが、
最近はSEO対策の作業が多いです。
現在14年目 まだ、しばらくはこの会社に居るつもりです。

あと、全ての記事がリンクフリーです。

最近の記事

過去ログ

全ての記事を表示する

全ての記事を表示する

カテゴリー

FC2カウンター

RSSフィード

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.--    [ Myカテゴリ:スポンサー広告 ]

MySQLのチューニング

別に遅いと感じたことは無いのですが、phpMyAdminなどで状態を見ると
赤字(問題有)で表示されている項目がある。
貧乏性な私には、損しているぞ~ 損しているぞ~と言われている気がして気持ちが悪い。
よってMySQLにチューニングを施すことにした。
設定は以下のファイルにて行う。
(/etc/mysql/my.cnf)

#key_buffer
#検索に使われるインデックスをバッファに保存する際のメモリサイズです。
#メモリに余裕がある場合増やすとパフォーマンスが向上します。
#MySQL ABでは,マシンに搭載しているメモリーの1/4を推奨値としている。
#key_buffer = 16M (変更前)
key_buffer = 1024M (変更後)

#table_cache
#データのキャッシュサイズです。
#値を大きくすることでディスクのI/Oが減りパフォーマンスが向上します。
#接続数が少ない人はあんまり関係ないみたいだが、そのうち増やすかも
#table_cache = 64 (デフォルトのまま:変更なし)
table_cache = 256


#tmp_table_size
#構文実行中にサーバによって自動的にディスクに作成された一時テーブルの数です。
#Created_tmp_disk_tables が大きい場合、原因の一時テーブルをディスクベースの変わりにメモリベースにさせるように、
#値 tmp_table_size を増やしたいでしょう。
#tmp_table_size メモリ内のテンポラリテーブルがこのサイズを超えると、
#MySQL は自動的にこれをディスク上の MyISAM テーブルに変換する。詳細な GROUP BY クエリを頻繁に行い、
#メモリに余裕がある場合は、tmp_table_size 値を大きくする。
tmp_table_size = 256MB

#最大接続数
#max_connections = 100
max_connections = 8 (そもそも私以外が使うことはあまり考えていないので下げる)

#sort_buffer_size
#この値はコネクションごとに必要となるので注意
sort_buffer_size = 4M


そしてここまでやると赤字はほとんど消えたが、以下の2点の赤字が消えない。
Handler_read_rnd_next 3,385
Opened_tables 144

Opened_tablesに関しては、テーブルキャッシュの値を上げれば消えるらしいのだが、
いくら上げても赤字は変わらないので、放置。

Handler_read_rnd_next は照会がインデックスを利用するように書かれていないことを示唆するらしい。
とは言っても、再起動直後ですでに赤字になっているのはなぁ・・・
こういう場合、普通はSQLを調査する。ただし今回の場合には調査すら不可能。

SQL文に問題が無いかを調べるにはSQL文の前に explainキーワードをつける。

実行結果
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY system 1
1 PRIMARY system 1
1 PRIMARY BJ ref PRIMARY PRIMARY 4 const 2804
1 PRIMARY DJ eq_ref PRIMARY PRIMARY 8 const,lfll.BJ.code 1 Using where
3 DERIVED Select tables optimized away
2 DERIVED BD ALL 8 Using where

■統計情報の更新
MyISAMでは定期的に統計情報の更新を行う必要がある。
統計情報の更新を行わない場合には、適切なIndexが使用されない為
開発者がforce indexなどでindexを指定する必要がある。

統計情報の更新を行うためにはanalyze table やoptimizeテーブル、
indexの作成などの方法がある。
それぞれ相当重い処理であるため、注意が必要である。


■ストレージエンジンのMemoryの速度
やっていくうちにストレージエンジンをMemoryにしたくなって来たが
以下のベンチマークを見ているうちにMyISAMでいいかと思えた。

http://www.thinkit.co.jp/free/article/0608/1/6/

Memoryのストレージエンジンが思ったよりも速くないんですよね。
転送速度だけで考えるのならば、メモリ(6.4~12.8GB/s)とHDD(60~90MB/s)では
速度差が100倍近くあるはずなのですが、
それ以外の計算で時間がかかっているため、このような結果になっているのでしょう。
スポンサーサイト
コメント(0)   2008.02.24    [ Myカテゴリ:試してみた ]

コメントの投稿













管理者にだけ表示を許可する

Template Designed By
ぐらいんだぁ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。