ご指定のページが見つかりませんでした URLの変更、もしくはページが削除された可能性があります。 お手数ですが、以下のリンクから目的のページをお探しください。
![KLab](https://cdn-ak-scissors.b.st-hatena.com/image/square/da71430a17afd3602d8c64f7c88004852af48b18/height=288;version=1;width=512/https%3A%2F%2Fwww.klab.com%2Fjp%2Fassets%2Fimg%2Fogp-image.png)
とある勉強会でSunのエンジニアの人のプレゼンを直接聞く機会があったのでメモったことを公開します。基本的な事が多いんだろうけど、非常に参考になりました。 パフォーマンスとは スループット レスポンスタイム/レイテンシ スケーラビリティ 上記のコンビネーション アーキテクチャとは Connection Thread Pool Query Cache Parser SQLクエリをパース Optimizer Storage Engines アプリによって最適なエンジンを選択すべき サーバのコネクション&スレッド my.cnf max_connection (100) 多すぎるとメモリを消費しきる可能性あり thread_cache_size (8) スレッドをコネクションの切断後にもキャッシュしておく数 一般的には max_connections / 3 sort_buffer_size(2M)
ちょっとキャッチ−なタイトルをつけてしまったが、今日は独断と偏見でMySQLを高速化する方法を10個紹介しよう。MySQLサーバをチューニングするときや初期導入する場合などに参考にしてもらいたい。 1. バッファを増やす、または減らす チューニングの基本中の基本であるが、適切なバッファサイズを設定することはパフォーマンスチューニングの要である。主なバッファは次の通り。 innodb_buffer_pool_size・・・InnoDBだけを利用する場合は空きメモリの7〜8割程度を割り当てる最も重要なバッファである。余談だが、実際にはここで割り当てた値の5〜10%ぐらいを多めにメモリを使うので注意が必要だ。 key_buffer_size・・・MyISAMだけを利用する場合は、空きメモリの3割程度を割り当てるといい。残りはファイルシステムのキャッシュ用に残しておこう。 sort_buffer_
ここでは、サーバパラメタの最適化によるMySQLのチューンについて紹介する。 _ パラメタのチェック 現在の設定値を確認するには、 # mysqld --help とする。 MySQL-5.xでは、 # mysqld --verbose --help としないと、確認できなかった。 あるいは、クライアントから、 mysql> SHOW VARIABLES; でもOK。 ↑ key_buffer_size † MyISAM テーブルのインデックスを保存しておくバッファの大きさ。サーバ全体で共有される。メモリに余裕があれば、MyISAMのみのMySQL専用サーバなら、RAMの1/2、Apache などと共用なら、RAM の1/4程度とする。ただし、サイズを大きくすると、OSのページングのために、逆に遅くなることもあるので注意。 set-variable = key_buffer=256M M
MySQL(バージョン 4.0.1以降)にはクエリキャッシュの機能があり、これをONにするとクエリ結果をキャッシュから読み出すことが出来て高速な動作が期待できる。 ■ 1.まず現在クエリキャッシュが有効かどうかを調べる show variables like 'query_cache_%'; show variables like 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cac
メモエントリ。 MySQLのバイナリログをSQLのトレース目的で使ったのでメモ。 MySQLのバイナリログ取得設定 MySQLのバイナリログをとっておけば色々出来る、その辺は公式やら書籍が詳しいので割愛。 取りあえず設定。 my.cnfを編集、[mysqld] のセクションに取りあえず3行入れよう、ディレクトリはmysqlユーザが読み書きできるところならどこでもいい、この例では yum でのデフォルトのdataディレクトリだ。 [mysqld] ・・・ log-bin=/var/lib/mysql/binary expire_logs_days = 14 max_binlog_size=200M "log-bin"だけでも良いけど、放っておくとどこまでもログが残る、1ファイル200MB制限・14日間保存と ファイル容量を制限するのは、ログ抽出の際に不便だから。 これで
バイナリログには、テーブル作成操作やテーブルデータへの変更などのデータベース変更を記述する「イベント」が格納されます。 また、行ベースのロギングが使用される場合を除き、(一致する行のない DELETE などの) 潜在的に変更を行おうとしたステートメントについてのイベントも格納されます。 バイナリログには、データを更新した各ステートメントに要した時間に関する情報も格納されます。 バイナリログには 2 つの重要な目的があります。 レプリケーションの場合、レプリケーションソースサーバー上のバイナリログは、レプリカに送信されるデータ変更のレコードを提供します。 ソースは、バイナリログに含まれている情報をレプリカに送信します。このレプリカは、それらのトランザクションを再現して、ソースで行われたものと同じデータ変更を行います。 セクション17.2「レプリケーションの実装」を参照してください。 ある特定
MySQLのログファイル MySQLのログファイルは、実行エラーログ、クエリログ、スロークエリログ及びトランザクションログの4種類のログがあります。 実行エラーログ 実行エラーログは、起動、停止及び実行時のエラーがMySQLディレクトリに"ホスト名.err"というファイル名で保管されます。 MySQLで障害発生時に障害特定の情報を得ることが出来ます。 ・設定方法 1.コマンド UNIX、Linuxの場合 $ mysqld_safe --log-error=myerror.log --log-warnings=1 Windowsの場合 C\> mysqld-nt --log-error=myerror.log --log-warnings=1 オプション オプション 内容 --log-error[=filename] エラーログの出力先ファイル名を指定します。 --log-warnings[
01/13 Re2:「福沢諭吉の正体」-補足1-東大話法の元祖(山根治) 01/13 Re1:「福沢諭吉の正体」-補足1-東大話法の元祖(Kan Yabumoto) 01/07 Re6: ホリエモンの弁解術 -1(Smitha695) 01/07 Re1:謹んで新年のご挨拶を申し上げます(須増) 12/01 Re25: 倉田まり子事件の真相 -その3(ナマナマ) ※以前別の場所で書いた文章を備忘的に書き記しておきます。 作成にあたっては「PHP と Web アプリケーションのセキュリティについてのメモ」を参考にさせていただきました。この場をお借りして御礼申し上げます。 基本は「外部から受け取ったデータ(変数)について、不正な場合はエラー処理をするか無害化(サニタイズ)する」。これに尽きるようです。 主なセキュリティホールとしては、データベース利用時の「SQLインジェクション」と、HTML表
この機能はMyISAMにはなかったものなので、自分用のメモを書きました。 行レベル・ロックとは 行レベル・ロックは「レコード単位のロック機能」のことです。1レコードだけロックされるわけではなく、対象となる複数レコードがロックされます。 innoDBテーブル・タイプでは、レコード更新時とSELECT文(ロック・オプション付き)で行レベル・ロックが行われます。 読み取り時のロック 通常の「SELECT .. FROM ..」というステートメントでは、いっさいロックされません。また、読み取り一貫性機能によって、こういったクエリーを実行した後に、他でロックしても読み取りを続行することは可能です。 読み取り時にロックしたい場合、明示的にロック方法を指定する必要があります。 ロック方法 SQL 共有モードでは、まだ残っている更新トランザクションが存在したら、まず、そのトランザクションが終了するまで待機
データのクエリーを実行してから、同じトランザクション内で関連データを挿入または更新する場合は、通常の SELECT ステートメントで十分な保護が提供されません。 ほかのトランザクションは、クエリーが実行されたばかりの同じ行を更新または削除できます。 InnoDB では、追加の安全性が提供される 2 つのタイプのロック読み取りがサポートされています。 SELECT ... FOR SHARE 読み取られる行に共有モードロックを設定します。 ほかのセッションもその行を読み取ることができますが、トランザクションがコミットするまで変更することはできません。 これらの行のいずれかがコミットされていない別のトランザクションによって変更された場合、クエリーはそのトランザクションが終了するまで待機してから、最新の値を使用します。 SELECT ... FOR SHARE は SELECT ... LOCK
ロックを取得するには以下のようにする。 mysql> LOCK TABLES friends READ; READロックを取得 mysql> LOCK TABLES friends WRITE; WRITEロックを取得 mysql> LOCK TABLES table_a READ, table_b WRITE; 複数のテーブルを同時にロック テーブルのロックを解除する場合は、以下のようにする。 mysql> UNLOCK TABLES; 複数のテーブルをロックする場合にはLOCK TABLESにカンマで区切ってテーブルを並べる。LOCK TABLESを複数回呼び出して複数テーブルをロックすることはできない。(LOCK TABLESを実行するとすでに取っているロックは解除される) これは、複数のテーブルをロックする場合は、ロックの取得順はMySQLが管理し、どのスレッドも同じ順序でロックを
MySQL には、テーブルの定義やデータを追加するための SQL 文を出力するための mysqldump が用意されています。 すべてのデータベースをバックアップするには、次のように指定します。 $ mysqldump -A -u root -p パスワード --opt > ダンプファイル名 指定してあるオプションの意味は、次のようになります。 -a:全てのデータベースを対象にします。 -opt:クエリをバッファせず、stdou に直接ダンプする。 drop table を追加する。 各テーブルダンプの前に LOCK TABLES を追加し、後に UNLOCK TABLE を追加する。 複数行 INSERT 構文を使用する。 ダンプを開始する前にすべてのテーブルをロックする。 特定のデータベースをバックアップする場合、次のように指定します。 $ mysqldump データベース名 -u r
■ MySQL 4.1 以降の文字化け問題 先に結論を書いておく。 skip-character-set-client-handshake オプションを使いましょう。 それで解決します。 今回、MySQL 4.0 → 4.1 に移行しようと思い、 あちこちで情報を集めて回ったが、 init-connect を使えばいいとか、 そのはずなのになぜかうまくいきませんとか、 いろいろ書いてあって混乱させられた。 結局、 日本 MySQL ユーザ会のサイトの FAQ に載っている情報が、一番詳しくてまとまっていると思うので、 そちらの情報を一読することをオススメする。 が、せっかくなので、 自分なりに理解したことをまとめてみる。 (以下の説明で、**** の部分は utf8 か ujis か sjis のいずれか) MySQL 本体の設定 バイナリで配布されている MySQL は、 大抵はデフォ
MySQL4.1系ではデフォルトでUTF-8文字列が使われます。 PHPから普通にデータ挿入をしようとすると、文字化けします。 my.cnf 設定ファイルで、EUC(ujis)設定を行います。 次のように記述してcharacter-setをujisにしましょう。 [client] default-character-set=ujis [mysqld] default-character-set=ujis character-set-server = ujis [mysqldump] default-character-set=ujis [mysql] default-character-set=ujis my.cnfを修正した上で、mysqlを起動している場合は再起動します。 それで、SQL文を発行するまえに、クライアントの文字コード設定をしましょう。 文字コード設定は次のSQL構文で設定
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く