はじめに 「Homebrew」とは、MacOSX用のパッケージ管理システムである。 「Homebrew」を使って、MacOSXにインストールされていないソフトウェアパッケージをインストールすることができる。 今回は、この「Homebrew」を Mountain Lion上にインストールするための手順について記述する。 前提条件 対象の環境情報を以下に示す。 ソフトウェア バージョン
ちょっとキャッチ−なタイトルをつけてしまったが、今日は独断と偏見でMySQLを高速化する方法を10個紹介しよう。MySQLサーバをチューニングするときや初期導入する場合などに参考にしてもらいたい。 1. バッファを増やす、または減らす チューニングの基本中の基本であるが、適切なバッファサイズを設定することはパフォーマンスチューニングの要である。主なバッファは次の通り。 innodb_buffer_pool_size・・・InnoDBだけを利用する場合は空きメモリの7〜8割程度を割り当てる最も重要なバッファである。余談だが、実際にはここで割り当てた値の5〜10%ぐらいを多めにメモリを使うので注意が必要だ。 key_buffer_size・・・MyISAMだけを利用する場合は、空きメモリの3割程度を割り当てるといい。残りはファイルシステムのキャッシュ用に残しておこう。 sort_buffer_
MySQLに限った話ではないが、データベース管理システムに大量のデータを投入するのは時間が掛かり大変苦痛を伴う作業である。劇的に効能があるわけではないが、MySQLを利用しているとき、特にInnoDBを使っている場合にはデータの投入を高速化するためにいくつかテクニックがあるので紹介しよう。皆さんの作業時間が短縮され、少しでも早く帰路に着いたりサービスインさせたりという形でお役に立てれば幸いである。ちなみに、タイトルはネタであるのだが、もし本当に3秒で以下の全ての設定を行えた人が居たら教えて頂きたい! ログファイルサイズの調整データ投入時に限った話ではないが、ログファイルサイズを調整するのは更新性能にとって非常に重要なファクターである。バッファプールのサイズが重要なことに代わりはないが、同じぐらいログファイルのサイズも重要である。InnoDBはログファイルを使い切ってしまうと、バッファプール
MySQL 5.1で追加されたメジャーな機能の影に隠れた、地味だが便利な改善がある。それがスロークエリログに関する仕様である。MySQL 5.0まではスロークエリログは1秒未満のクエリを捕捉することが出来なかった。が、MySQL 5.1では1マイクロ秒までのクエリを記録できるようになっている。従って、0.5秒かかるけど大量に実行されてパフォーマンスに大きな影響を与えている!というようなクエリの発見が出来るようになった。1秒未満のクエリを追跡したい場合、例えば以下のような設定をする。 [mysqld] slow_query_log=ON slow_query_log_file=mysql-slow.log long_query_time=0.1 MySQL 5.0まではlog_slow_queryというオプションだったのが、MySQL 5.1ではslow_query_logというオプション名
MySQLのログの種類とログの仕方を調べてみた(実施例)
最近、寒暖の差が激しいですがみなさん体調は崩されていないでしょうか? こんにちわ。モニプラ for Facebookを担当しています高橋です。 サービス開始当初は問題なかったものの稼働が高くなりデータ量が多くなって クエリのパフォーマンスが悪化すること…よくありますよね? 今回はクエリチューニングの基本的な手順とケース別に解決方法を解説したいと思います。 クエリチューニングの手順 1.スロークエリログで問題のクエリをあぶり出す まずはどのクエリが問題なのか特定する必要があります。 アプリケーション側でクエリの実行時間を測定し自前でログを出力しておくというのも手ですが、 お手軽にMySQLの設定で一定時間以上掛かったクエリをログに出力しておくことができます。 スロー クエリ ログ(MySQL 5.1 リファレンスマニュアル) mysqldを–log-slow-queriesオプションつきで起
ストレージエンジンとしてInnoDBを使うときはMyISAMのときと触るべきポイントが違うので注意。 http://www.mysqlperformanceblog.com/files/presentations/OSCON2004-MySQL-Innodb-Performance-Optimization.pdf を読みながら取ったメモ。状況としてはRedHat AS3.0で動かしたときのDBT2*1のパフォーマンスを改善していくというもの。MySQL デフォルト状態での分析 Handler_read_nextが多い、つまりrange scanかindex scanが多すぎる slow query logで何が悪いかを引っかける 例では2秒以上処理にかかったqeuryを記録するようにしている 結果を分析 update文が遅かったけど、update文そのままではexplainできないので、
昨日、MySQL のクエリキャッシュを有効にして WordPress を高速化するという記事を書きましたが、MySQL のチューニング策としてもうひとつメモリバッファのサイズを変更してみるのも有効です。この手法は MySQL で使用しているストレージエンジンが InnoDB の場合に有効です。また以下の方法は管理者権限が必要です。 MySQL では頻繁に使われるデータやインデックスをメモリにキャッシュして効率化・高速化を図りますが、CentOS 5.4 の MySQL ではデフォルトの設定は少なめです。メモリにある程度余裕があれば、この値を増やすことでパフォーマンスが改善される可能性があります。 MySQL のバッファのサイズは SHOW VARIABLES で表示されます。大量に表示されるので対象を絞るために LIKE を使用します。 # mysql (databasename) -u
MySQLお勉強メモ、InnoDB編です。 特徴 データ形式 ibdata files : データ/インデックス領域。UNDO領域/データディクショナリが含まれる。 ib_logfile files : REDOログのようなもの メタデータ : データベースディレクトリに存在(テーブル名.FYM) ibdataはテーブル毎に分割することが可能。テーブルメンテナンスやパーティションで有効。 トランザクション 対応。ACID属性に準拠している。デフォルトはAUTOCOMMIT。 デフォルト分離レベルはrepeatable read。Oracleはread committed。 ロック 行ロック。完全な行レベルロックではなく、インデックスのnext_key_lock。なので、当該レコード以外の部分(中間Node等)でもロックがかかる可能性がある。 ALTER TABLE時にはテーブルロック(RE
挿入の速度を最適化するには、多くの小さな操作を 1 つの大きな操作に組み合わせます。理想的には、単一の接続を作成し、多くの新しい行のデータを一度に送信し、すべてのインデックスの更新と一貫性チェックを最後まで延期します。 行の挿入に必要な時間は、次の要因によって決まります。ここでの数はおよその割合を示しています。 接続: (3) サーバーへのクエリーの送信: (2) クエリーの解析: (2) 行の挿入: (1 ×行サイズ) インデックスの挿入: (1 ×インデックス数) クローズ: (1) これには、テーブルを開く初期オーバーヘッドを考慮に入れていません。これは同時実行クエリーごとに 1 回実行されます。 テーブルのサイズによって、log N だけインデックスの挿入が遅くなります (B ツリーインデックスであるとして)。 次の方法を使用して、挿入を高速化できます。 同じクライアントから同時に
概要 tmuxとはターミナルマルチプレクサの略で、主にターミナルで複数のセッション管理ができるツールである。 セッション管理以外にも画面分割をしたり、Vimのキーバインドでターミナル内の文字列をコピー&ペーストができる。 10年以上前に教えてもらって長らくターミナルと組み合わせて使っていたのだけど、最近ではSSHをすることも少なくなり、セッション管理としての用途はほぼ使わなくなってきたものの、画面の分割やコピペはまだまだ重要な機能として使っている。 特に、証跡としてterraform plan結果をガッとコピーしてSlackのテキストスニペットに貼り付けるなどで多用しているし、ターミナルを遡るスクロールにもVimキーバインドが便利なので活用していた。 課題 先述の通り、セッション管理としてはほぼ使っておらず、無くても困らなくなってきた。 なので画面分割とコピペができれば十分なのである。 ま
ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは、オークション事業部のWangです。 データウェアハウス(以下DWH)という言葉になじみのない方は検索していただいたほうがよいかもしれません。 検索するのがめんどい、という方は、かみ砕いた表現ができなくて恐縮ですが、 基幹系システムから抽出したデータを目的をもって再構成し、 使用可能な状態に保管されたデータの集合体、とお考えください。 オークションでは、具体的には出品、入札、落札などのトランザクションデータや、 それをいろいろな単位で集計したデータなどが該当します。 ここでいう単位というのはたとえば、日ごと、週ごと、月ごとや、以前の記事でも紹介されている カテゴリといったものになります。 こういったデータは、運用、運営、
Access,SQLServerの場合 AccessとSQLServerは +演算子を使用して文字列を連結します. SELECT '文字列1' + '文字列2' + ... Oracleの場合 OracleはCONCAT関数を使用するか ||演算子を使用して文字列を連結します. SELECT CONCAT('文字列1', '文字列2') SELECT '文字列1' || '文字列2' || ... MySQLの場合 MySQLはCONCAT関数を使用して文字列を連結します.なお,||演算子はMySQLでは論理和(OR)として解釈されるため,文字列連結の用途には使用できません. SELECT CONCAT('文字列1', '文字列2', ...) PostgreSQLの場合 PostgreSQLは ||演算子を使用して文字列を連結します. SELECT '文字列1' || '文字列2' ||
mk-mode.com Linux, Debian, IT, Server, PG, Ruby, Rails, Python, C++, Fortran, PC, MariaDB, math, GIS, etc... MySQL の設定ファイル “my.cnf” を配置できる場所は複数あり、あらかじめ決められた順序に従って読み込まれます。 以下、備忘録です。 0. 前提条件 OS は Unix 系(Linux, BSD, MacOS)を想定。(Slackware, Suse 系 Linux や Windows 等は不明) 1. “my.cnf” の配置場所と読み込み順序 “/etc/my.cnf” “/etc/mysql/my.cnf” “SYSCONFIGDIR(コンパイル時指定)/etc/my.cnf” “$MYSQL_HOME(環境変数)/my.cnf” --defaults-ext
SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント
mysqlでテーブルのレコード数を取得する方法です。 select count(*) from テーブル名 でもよいのですが、たとえばDBの全テーブルのレコード数を知りたい場合には、テーブル数だけ select を実行しなければならなくなります。 こんな場合には、mysqlのテーブル情報でも書いた information_schema DB の TABLES テーブルから情報を取得します。 > select table_name, table_rows from information_schema.TABLES; +------------+------------+ | table_name | table_rows | +------------+------------+ | tbl1 | 10 | | tbl2 | 5 | | tbl3 | 5 | +------------+-
かなり当たり前かもしれないのだけれど、 改行を含んだデータ登録は、そのデータ登録の前に、 「改行」を「改行コード」に変換しておく というやり方が一般的(?)なのね。 これまで感覚的にそのことを実践してきたのだけれど、 みんなそうやっているということを知って、 ちょっと安心した感はある。 でも、DBに登録した改行コードを表示させる際に、 SQL側で置換させる方法があったことは初めて知った。 これまで自分はずっとアプリケーション側で処理していたものだから。 ■MySQL-フィールドの改行を削除 http://tuevin.jugem.jp/?eid=74 ======================================= $sql = 'SELECT Replace(Replace(フィールド, Char(13), ""), Char(10), "") FROM table WHE
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く