タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

mysqlとperformanceとMySQLに関するkathewのブックマーク (36)

  • たった3秒でInnoDBのデータローディングが快適になるライフハック

    MySQLに限った話ではないが、データベース管理システムに大量のデータを投入するのは時間が掛かり大変苦痛を伴う作業である。劇的に効能があるわけではないが、MySQLを利用しているとき、特にInnoDBを使っている場合にはデータの投入を高速化するためにいくつかテクニックがあるので紹介しよう。皆さんの作業時間が短縮され、少しでも早く帰路に着いたりサービスインさせたりという形でお役に立てれば幸いである。ちなみに、タイトルはネタであるのだが、もし当に3秒で以下の全ての設定を行えた人が居たら教えて頂きたい! ログファイルサイズの調整データ投入時に限った話ではないが、ログファイルサイズを調整するのは更新性能にとって非常に重要なファクターである。バッファプールのサイズが重要なことに代わりはないが、同じぐらいログファイルのサイズも重要である。InnoDBはログファイルを使い切ってしまうと、バッファプール

    たった3秒でInnoDBのデータローディングが快適になるライフハック
  • やってはいけない!!MySQLに悲鳴をあげさせる10の方法

    いつも「MySQLを使うときはこうするべき」という観点から記事を書いているが、今日は逆に犯してはいけない過ちをリストアップしようと思う。 1. 全てのカラムにインデックスをつけるデータベース初心者がもっともやってしまいがちな間違いはコレではないだろうか。インデックスはいい。検索がとても速くなるから。しかし、それと引き替えにインデックスは更新するときにコストがかかるし、その分多くのディスクスペースを消費する。特に更新にかかるコストは時に甚大で、該当するインデックスのページがキャッシュ上にない場合はディスクからいったんそのページを読み込まなければいけない。ディスクアクセスは動作にとても時間がかかるので、インデックスが多数、例えば全てのカラムに付いていたりすると「あれ?固まったか?」というような状態になってしまうことがあるだろう。インデックスは必要なカラムにだけつけるようにテーブルを設計しよう。

    やってはいけない!!MySQLに悲鳴をあげさせる10の方法
  • http://www.fwoabw.info/entry/2016/07/12/post-8177

    kathew
    kathew 2017/03/24
    同様に、VARCHARと他テーブルの項目を比較する時も、他テーブルの項目が文字列でなければインデックスが使われないのでした(´・ω:;.:...
  • MySQLのデータベースを最適化するとWordPressは高速化するのか?

    MySQLのデータベースを最適化するとWordPressは高速化するのか?
  • phpMyAdminを使って、MySQLデータベースのオーバーヘッドを最適化 - WordPress - MySQL入門 - Webkaru

    phpMyAdminを使って、MySQLデータベースのオーバーヘッドを最適化する方法を紹介します。 オーバーヘッドとは、MySQLデータベースへの書き込み・削除・更新(INSERT、DELETE、UPDATE)を繰り返していると、たまってくるゴミのようなものです。 オーバーヘッドが多くなるとMySQLデータベースの挙動が重くなり、クエリが遅くなってくるので、ここではphpMyAdminを使って、MySQLデータベースのテーブルを最適化し、オーバーヘッドを取り除く方法を紹介します。 ※ 人気のブログシステム「WordPress」もデータベースにMySQLを採用しているので、オーバーヘッドがたまってくると表示が遅くなったり、管理画面が重く感じるような症状があらわれます。 WordPressの使い方

    phpMyAdminを使って、MySQLデータベースのオーバーヘッドを最適化 - WordPress - MySQL入門 - Webkaru
  • Wordpress設置時に注意!MySQLのオーバーヘッドについて | 株式会社LIG(リグ)|DX支援・システム開発・Web制作

    サムギョプサルマシッソヨ。チェイルムンおっしーイムニダ。 WordPressでサイト構築をして、運営している内に何だか色んな動作が遅くなってくる。 そんな経験ないですか? これを放置して運営し続けると、閲覧も管理画面へのログインも出来なくなる可能性が出てきます。 何故こういった現象に陥るかと言うと「MySQLのオーバーヘッド」が原因だそう。 オーバーヘッドとは・・・INSERT、DELETE、UPDATEを 行っているうちにできるゴミ(未使用)領域のようなもの。 一番の原因としては記事投稿時に2.6以降から登場した「リビジョン」機能。 リビジョンとは・・・記事の変更を履歴として残す便利な機能 自動保存でどんどんリビジョンが増えた場合過去バージョンが無駄に残されてしまう。 公開したブログに対してそんなにリビジョンが必要あるのか疑問。 これは何とかしないと。 対応策を考えてみました。 【対処法

    Wordpress設置時に注意!MySQLのオーバーヘッドについて | 株式会社LIG(リグ)|DX支援・システム開発・Web制作
  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
  • MySQLはインデックスされた文字列型カラムに数値型カラムをインデックスを使って結合できない - Qiita

    Help us understand the problem. What is going on with this article?

    MySQLはインデックスされた文字列型カラムに数値型カラムをインデックスを使って結合できない - Qiita
  • MySQLのexplainとかについてしらべたときのメモ - Qiita

    namespace :insert do task do: :environment do carriers = ['a', 'b', 'c'] (1..1000000).each do |i| u = User.create(name: "name#{i}", carrier: carriers[rand(3)]) u.created_at = DateTime.now - rand(365*24*3600).second u.save end end end レコード数: 100万件 carrier(簡単のためにとりあえず"a","b","c"の3種類を取るということにした) created_atはとりあえず現在から一年以内とした(DateTime.now - rand(365*24*3600).second) 結果 クエリ select carrier, date(created_a

    MySQLのexplainとかについてしらべたときのメモ - Qiita
  • 【MySQL】SELECT * (アスタリスク) (全取得)が遅いのか検証する - pospomeのプログラミング日記

    個人的にDBからデータを引っ張るときに必要なカラムのみを指定するのが嫌い。 カラム指定すると 検索条件が同じなのに、 必要なカラムが異なるだけで複数のAPIを実装し、 使う側は適切なAPIを選択しなければならない。 APIの命名にも苦労するし、そもそもDAOが肥大化する可能性があるのがイヤ。 命名も実装も上手くやれば問題ないんだろーけど、実際はそーもいかない気が・・・。 ということで、 必要なカラムのみ指定するのが正しいとは思うけど、 SELECT * で全カラム引っ張りたい。 でも、無駄なカラムを引っ張るとパフォーマンスが気になる。 ということで、検証してみた。 結論から言うと、結構変わるかもしれない。 以下がテスト環境。 CentOS 6.5 MySQL 5.5 メモリ:500MB(buffer_poolに384MB割り当て) 以下が今回のテストテーブル int型のカラムを30個用意し

    【MySQL】SELECT * (アスタリスク) (全取得)が遅いのか検証する - pospomeのプログラミング日記
  • はじめての MySQL で100万件のデータを管理する時に行ったチューニングまとめ

    MySQL の勉強をせずにフレームワーク等で SQL を書かずに Web サイトを構築していました。データ数も2万件程度でしたので、そこまで困ることはありませんでしたが、今回100万弱の商品データを扱う機会ができたので、MySQL のチューニングや発行する SQL について見直す機会がありました。 この記事では MySQL を高速化するのに行った対策など勉強したものを自分用にメモしておきました。 条件式で比較するカラムにインデックスを使用して高速化 商品コードで存在しない商品を見つけて、商品をDBに登録するという処理を行っている場合、4万件超えたころから処理に2秒以上かかるようになってきます。12万件超えた頃には10秒程度かかるようになってしまいましたが、商品コードのフィールドに対してカラムインデックスを貼ることで0.2秒に短縮することができました。 MySQL のリファレンスにも以下のよ

  • CakePHPでやたら遅いSELECTクエリの改善 - うっかりエンジニアのメモ

    プライベートで作ったWebアプリで、一画面だけブラウザに表示されるまで3秒かかる激重画面があります。 この画面ではCakePHPが自動的にいろんなテーブルをjoinしたSQLを生成しているので、その辺りが原因だろうとは感づきました。 それにしても、たかだか20行程度のselectなので、なんか変だ。。。 ちょっとだけ分析と改善をしました。(はじめてのパフォーマンスチューニング…ドキドキ) 結論としては、1000倍早くなりました。 CakePHPのクエリ自動生成は楽ですが、パフォーマンス上の問題が発生した時にはやはりSQLを知らないとダメだなぁ… 環境 VirtualBoxのVM(メモリ613MB)上に下記の環境があります。 CentOS 6.5 x64 nginx 1.0.15 PHP 5.5.13 MySQL 5.5.37 CakePHP 2.4.0 テーブル構造 テーブル 内容 外

    CakePHPでやたら遅いSELECTクエリの改善 - うっかりエンジニアのメモ
  • MySQLの超遅いSELECTが劇的に早くなった | X->A->O

    CakePHPはよく触っていたものの、MySQLについてあまり知らなかったんですが、大規模なデータベースを扱ってみようと思い立ちいろいろ試行錯誤しています。 で、ついさっき感動したのが、40万件のレコードを扱ってるテーブルに簡単なSELECT分を投げて返ってくる時間がなんと5秒もかかっていて、なんじゃこりゃ?って首をかしげてたんですが、INDEXひとつで劇的に早くなったこと。 40万件が大規模かそうでないかはこの際おいておいて、INDEXのつけ方次第でこんなにも速度に変化があるのかと涙が出そうになった。 最初の激遅いテーブルは簡単に書くとこんな具合。 CREATE TABLE IF NOT EXISTS `shops` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `status

  • Mysqlでログ系テーブルを運用するときやっておきたいこと - 主夫ときどきプログラマ

    SNSやソーシャルゲーム、アドネットワークなどのシステムではいろいろなログ情報をDBに保存することもあると思います。 そのさい、日々増えつづけるデータやパフォーマンスをどの様にさばいていくかが重要になってきます。 今回はログ系のデータをMysqlでどのように運用していくか、をテーマにいくつかのノウハウをまとめました。 ログ系テーブルの特徴 ログ系のデータとは、つまり何かのアクションの履歴データのことです。 一般的にはこのような形になるかと思います。 CREATE TABLE `t_logs` ( `id` bigint(20) unsigned NOT NULL, `user_id` int(10) unsigned NOT NULL DEFAULT '0', `event_id` int(10) unsigned NOT NULL DEFAULT '0', `created` datet

    Mysqlでログ系テーブルを運用するときやっておきたいこと - 主夫ときどきプログラマ
  • MySQLではIN句とサブクエリの組み合わせはインデックスが効かない!?

    な、なんと person_diaryはインデックスが適用されずにフルスキャンされ(1行目のkeyがNULL) 逆にpersonはid列に設定してあるプライマリキーが適用される(2行目のkeyがPRIMARY) という二つの謎な現象が発生しました。 そもそもpersonはnameカラムに対してLIKE検索しているのに、id列のプライマリキーが効いちゃうのは全く納得いきません。なぜ、どうしてこんなことが起こるのでしょう? 原因 私がMySQLに期待していた動きとしては ①サブクエリを実行してperson.idのリストをメモリ中に作成 ②person.person_idに張られているインデックスを使って検索 というところでした。 期待通りに動いてくれなかったのには二つのMySQLの特性が関係していました。 特性① サブクエリを含むSQLは外側から先に実行される MySQLの場合、サブクエリを含む

    MySQLではIN句とサブクエリの組み合わせはインデックスが効かない!?
  • コンシューマサービスの運用に耐えるDB性能設計とは - レベルエンター山本大のブログ

    JOIN 禁止の話に、いまだに絡んでくれる人がいた。 ■「艦これ」から、ソーシャル系のサーバ構成を考える - SQLer 生島勘富 の日記 僕が以前に書いたテーマに関するエントリは以下の3つ。 ■信じられないDB文化Join禁止」に「固定長DB」、、でも、合うんです。大規模コンシューマ向けサービスのRDB設 ■信じられないDB文化「固定長DB」でもあうんです。大規模コンシューマ向けサービスのRDB設計 ■ホント信じられないDB文化だけど、統計情報固定化はマジでアリ ちょうど折よく、ウチの会社のオラクル女子が書いたエントリの続きも公開されました。 ■一緒にまなぼ!「hiromi と楽しむOracleパフォーマンスチューニング!」【Vol.2 Statspackを見てみよう】 ということで僕の中でDB熱が盛り上がってきたので返答的なエントリを書きます。 「とりあえずメモリだけ気にしておけ」