1/10に日本oracle社主催のMySQL 8.0入門セミナー講演資料 (チューニング基礎編、SQLチューニング編)に行ってきました。 ・処理データ量 ・ここで設定されているサイズを超えるものはディスクによって行われる

並列処理が出来る件数が増えるほどこのスループットの値が向上する, ・レスポンスタイム(レイテンシー)  ・取得される行数が少ないテーブルから順番にjoinするのが基本 と 3. ・ソート処理用のメモリサイズ

・MySQL5.6でデフォルトが2MB⇒256KBに縮小されたらしい, テーブル定義においてもパフォーマンスを考える上で非常に大切になってくる。 データベースをはじめとするサービスのパフォーマンスは必ずハードウェアのスペックに依存するため、メモリやCPUの追加、ディスクのSSD化などに柔軟に対応できる必要がある。

1処理自体にどのくらい時間がかかるか, ・スケーラビリティ 当サイトの情報によるいかなる損失に関して、免責とさせて頂きます。ご利用の際はあらかじめご了承ください。, - SQL plan baseline "SQL_PLAN_0affabczcfaht8522f0db" used for this statement, SQL Developer Excelファイルを簡単にインポート/エクスポートする方法. By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away.

3.上記に対するチューニングは必要か、コストに見合ったビジネスメリットがあるかの検討, 例えばwebサイトなどの場合であれば、サーバ,DBサーバとの通信速度(ネットワーク)やリクエストの混雑状況、ファイル出力、データ加工処理などアプリケーションによる処理の差など様々な要素があるため、ここではMySQLデータベースの処理単体でのパフォーマンス測定について解説する、, 一番単純な方法は開発環境などで実際に利用するSQLを実行して各種指標を監視する方法である。 MySQL 5.6.22; スロークエリとは? 実行が遅いQuery。事業や実行する処理にもよるが、2秒以上かかっていたら大体遅い部類と言って良い。 ... 実行計画. DBのパフォーマンスチューニングでは大きく分けて2種類のアプローチがある。, ・DBチューニング(全体最適化) ・デフォルト(設定なし)の場合は151となっている, thread_cache_size Why not register and get more from Qiita? SHOW INDEX FROM table_nameにてインデックスが参照できるのでそこにないキーを指定された場合はインデックス検討の余地があると言える。, key ・サーバが許容可能なコネクションの数

・テーブル、インデックス、スキーマの統計、レイテンシ、待ち時間, performance_schema/sys_schemaで実行できるクエリサンプル, 上記にあげた確認方法の中でもDBサーバ設定にボトルネックがある場合、下記の値を参照・編集することで解決につながる可能性が高い。, max_connections 性能統計情報の仕組み ・可能なところはNOT NULLを宣言, 【インデックス】 ※参照速度は上がるが更新速度は下がるため貼りすぎも注意, ★スループットが低い、待機が多いことによるレスポンスタイムの低下はDB設定を見直す 上にいくほど処理が軽く、下に行くほど高コストとなっている。

・I/O量の多いファイルや処理、コストの高いSQL文、ロック情報 ・サブクエリの処理, 実行計画によってパフォーマンスが大きく変わる可能性もあるので、対象のクエリが適切な実行計画を持っているか確認をする。, type 下記が主にデータベースのパフォーマンスを測定するための指標となっている。, ・スループット ・テーブルスキャン ・SysBench, では実際にパフォーマンスチューニングを行っていく。 ※更新処理はインデックスがある方が時間がかかる

また下記コマンドにても参照・編集が可能。, 今回はパフォーマンスに焦点を置いているため、性能統計情報分析のために用意されているパフォーマンススキーマ/sysスキーマにフォーカスする。, ・パフォーマンス・スキーマ のステップを省略した、というものです。大概の場合悪い意味ではありませんが、「100バイトのインデックスを100リーフ読んでUsing index」と「4バイトのインデックスを10リーフ読んで各10バイトの行を10行フェッチ」というケースもあります(さすがにここまで極端な例はないと思うが、必ずしも最良を表すものではないということで)。, "Using temporary"はソートのために暗黙の(CREATE TEMPORARY TABLEステートメントで作成するテンポラリーテーブルに対して「暗黙の」としている)テンポラリーテーブルを利用していることを示します。単にインデックスがないカラムでソート、インデックスがあっても関数や演算子を利用した結果でのソートはクイックソートで済みますが、集計関数を利用した結果でのソートは暗黙のテンポラリーテーブルが必要になります(テンポラリーテーブルを作成した後にクイックソート)。, EXPLAINはずっと昔からあり利用用途も変わっていませんが、MySQL 5.6と5.7でそれぞれ少しずつ機能が追加がされています。, EXPLAINはSQLの実行計画に関する情報を取得するためのステートメントです。EXPLAINの結果は「その時点で実行計画がこのように選択された」という情報であり、統計情報の変化により変更される可能性があります。InnoDBの統計情報はサンプリングのため、テーブルが大きくなると統計情報と実際の値の分布が異なってくる傾向があります。利用されているインデックスが最適なものかどうかは、USE INDEX,IGNORE INDEX句を利用して実際に比べてみるのが一番です。, yoku0825 著

テーブルのアクセスに利用可能なインデックスの候補として挙げられるキーを表示してくれる

MySQLサーバ内の「イベント」ごとの処理時間を記録 ★テーブルで利用する列の型は、インプットを想定して適切な型にする MySQLの設定ファイルのパラメータ等を環境に適した形に操作する An Impress Group Company. まずはどのような設定がされているのか確認が必要。 ・増やしすぎるとサーバメモリを多く消費するためハードウェアのスペックと相談 ★自身の環境のメモリサイズを鑑みて有効に使えているか確認する 上記の例ではselect *で指定をしているためALLになっている。, possible_keys 実処理が実行される前のプロセスの準備時間にもキューに含まれるが、大量ののリクエストが発生した場合など現環境のスループットでは一度に処理できない際に待ち時間として増加される。当然、レスポンスタイムも増加する。, このキューイングの仕組みを理解した上で、どの指標が低いのか、そしてネットワーク、処理、I/O、テーブルロックなどどこにボトルネックがあるかによって効果的な方法が異なるので、これらを知ることがパフォーマンスチューニングの第一歩になる。, またパフォーマンスチューニングはどのようなものであってもコストがかかるため、そのパフォーマンス向上の必要性や費用対効果などもしっかり検討したうえで実施をしていく必要がある。, 以上のことをまとめるとパフォーマンスチューニングには実対応の前に下記のことを検討実施していく必要がある。, 1.パフォーマンスの測定(パフォーマンス状況の確認) ・クエリ結果のキャッシュ  ・3テーブル以上のjoinは結果セットが少量になるテーブルからjoin, 今回このセミナーに参加して、インデックスやjoinについては知っていたもののEXPLAINコマンドの便利さや、サーバ側のパラメータ設定などについては目からうろこだったので非常に勉強になりました。 主なプロセスとしては下記などがある。 後半のSQLチューニング章で紹介するEXPLAINコマンドやSHOW FULL PROCESSLISTコマンドを利用することでクエリ自体のステータスや対象テーブルの状況なども確認できるので併せて利用すると効率的。, その他ツールを利用する場合、下記などがある。

Copyright © 2004-2020 Impress Corporation. 実際にインデックスとして参照されたカラムになる。 ・処理時間 また、「実行時間の遅い」定義はlong_query_timeという変数で設定されている。, SHOW FULL PROCESSLIST Help us understand the problem. ISBN:978-4-295-00029-7 【データ型】 2.パフォーマンス低下のボトルネックの洗い出し(スループット?レスポンスタイム? I/O?) コンテナ領域で存在感を強めるNGINX、OpenShiftとの親和性でKubernetes本番環境のセキュリティや可用性を追求, CNDT 2020にNGINXのアーキテクトが登壇。NGINX Ingress ControllerとそのWAF機能を紹介, DXの実現にはビジネスとITとの連動が必須 ― 日本マイクロソフトがBizDevOpsラウンドテーブルを開催, Azureとのコラボレーションによる、これからのワークスタイルとは― Developers Summit 2020レポート, IT試験学習サイト『Ping-t』とLPI-Japanが語る Linuxエンジニア育成への思い, MySQL 5.6での機能強化点(その1)- パフォーマンスと使い勝手を大きく向上, ホスト型とハイパーバイザー型の違いは何?VMware vSphere Hypervisor の概要, InnoDBはデフォルトの設定で「前回の統計情報の更新から累計してテーブル全体の10%以上(MySQL 5.5とそれ以前は6.25%)が更新された場合、バックグラウンド(非同期)で統計情報を再作成する」ようになっている, InnoDBのサンプリングの設定はMySQL 5.5とそれ以前では1インデックスあたり8ページ(ハードコード)、MySQL 5.6では1インデックスあたり20ページ(設定可能)。InnoDBページのデフォルトは16KBなので1つのインデックスのサイズが数十GB、100GBを超えたとしてもデフォルトのままでは128KB~320KB程度しかサンプルを取らない。これはインデックスのサイズがせいぜい数MBであれば十分な精度だが、サイズが大きくなるに従って精度が悪く(=統計情報が間違いやすく)なる。. ・スレッドをキャッシュする数 All rights reserved. この記事では、クエリを実行する・explainを実行するといった超基本的な操作について、Workbench上でどう行えばいいか、スクリーンショットを用いて解説します。 使用する環境・バージョン. tcpdumpコマンドでパケットの通信を計測する方法や、MySQL Proxyで監視する方法がある。 プログラムより運動が好きです。. SHOW FULL PROCESSLISTコマンドを使えば現在実行中のクエリの実行時間やデータ量、ステータスなどが参照できる。, 実行計画とはSQLを処理する際の処理の手順となっている。 システム変数はmy.cnfやmy.iniにて参照・編集可能になっている 本記事では上記イベントのレポートをしていきます。, ※こちらのイベントではタイトルにもある通りMySQL8.0を対象としており、上記リンクからダウンロード可能な資料や本記事で解説するコマンド等はMySQL5.7以前のものではサポートされていない場合がございます。, 実際にパフォーマンスの向上方法を解説する前にデータベースにおけるパフォーマンスとは一体何を指し示しているかを整理する必要がある。 ・レスポンスタイムが長い場合にもこちらを増やすことで改善につながる可能性がある ・デフォルトは9, query_cache_size ・charではなくvarcharを利用する OS : MacOS Mojave ver 10.14.5; MySQL : Ver 8.0.18 for osx10.14 on x86_64 (Homebrew) ・桁数の多くない数値型に対してはtinyint,smallint,mediumintなどを利用する EXPLAINは、SQLの実行計画に関する情報を取得するためのステートメントです。実行計画とは「どのインデックスを使って(あるいはインデックスを使わずにテーブルスキャンで)クエリーを処理するか」をMySQLが判断した結果のことです。「インデックスはちゃんと使われているだろうか」「インデックスでどこまでクエリーを効率的に処理できているだろうか」という疑問が湧いた時には、「とりあえずEXPLAINで」となりますよね。, EXPLAINのマニュアルはこちらに、EXPLAIN の出力結果のカラムの意味についてはこちらに記載があります。, EXPLAINはMySQLのオプティマイザーがどの実行計画を選んだかを表示させるステートメントです。possible_keysからは「MySQLはこのクエリーに対してsome_indexまたはanother_indexが使えると判断した」、keyと key_lenからは「実際に使ったのはanother_indexで利用したのキー長さは34バイト」、rowsからは「実行計画上ではこのクエリーは9026812(約900万)行を検査する」、Extra: Using indexからは「テーブルそのものからデータを読み取らず、インデックスだけから読み取るデータで完結する」といったことがEXPLAINの出力結果から読み取れます。, しかし、another_indexが本当にこのクエリーにとって最良の選択なのかはEXPLAINから読み取ることはできません。ひょっとしたらsome_indexの方が速い可能性は十分あります。あるいはpossible_keysに表示されていない(MySQLが「利用できない」と判断した)インデックスの方が効率が良い可能性もないわけではありません(体感ではほぼないが実際にそのようなケースも存在する)。, また、実行計画上は約900万行を検査することになっていますが、「実際に何行検査したのか」は読み取れません。統計情報と実際のデータの分布に乖離がある場合、この値もまた乖離することになります。最後に、これは「EXPLAINを実行した時点で実行計画がこのように選択された」という情報であり、今後統計情報の変化により変更される可能性があります。, 泥臭い方法ですが、実際に実行してみるのが一番です。USE INDEXおよびIGNORE INDEX構文を使うことで、そのクエリーに利用するインデックスを指定できます。, USE INDEXはpossible_keysの値を書き換える(上書きする)ためのキーワードです。インデックスはコンマ区切りで複数指定可能で「USE INDEXで指定したインデックスの中から利用するインデックスを決定せよ」というような意味合いになります(通常は指定するインデックスが1つで「このインデックスを利用してクエリーを処理せよ」という意味合いで利用するキーワード)。, IGNORE INDEXはその逆で、MySQLが選んだpossible_keysから特定のインデックスを除外します。「possible_keysの選定はMySQLに任せるが、IGNORE INDEXで指定したインデックスは利用してはいけない」というような意味合いになります(よってテーブル上の全てのインデックスをIGNORE INDEXに指定すると強制的にテーブルスキャンにできる)。possible_keysが3つ以上ある場合で、MySQLが次にどのインデックスを選ぼうとするのかを知りたい時などに利用できます。, 上記の例ではUSE INDEX(some_index)でsome_indexを選ばせた場合に1割程度遅くなったということで、「MySQLの選んだanother_indexは正しかった」ということが判りました。実際に実行して試してみる場合、(元のクエリーも試してみるクエリーも)必ずクエリーを複数回実行することを忘れないでください。, クエリーの実行速度はバッファプールに大きく依存します。多くの場合、1回目のクエリーはバッファプールが温まっておらず非常に低速です。通常のトラフィックで多く利用されているインデックスは(それが正しいものであれ間違っているものであれ)どの時間帯でもバッファプールに多く乗っている可能性が高く、1回目のクエリー同士を比較してしまうと結果はバッファプールの偏りに依存することがあるからです。, そのクエリーがどれだけ行を読み込んだのかはHandler_%ステータス変数で確認できます。ステータス変数はSHOW STATUSステートメントで参照できるMySQL内部のステータスです(多くはカウンター)。ステータス変数の多くは「セッションスコープ(接続中のスレッドのみのステータス変数)」と「グローバルスコープ(MySQLの起動から現在まで全てのステータス変数の累計)」があり、それぞれSHOW SESSION STATUS,SHOW GLOBAL STATUSステートメントで表示できます(SESSIONまたはGLOBALキーワードを省略した場合はセッションスコープの値が出力される)。, ステータス変数には多くの種類がありますが、ここではHandler_で始まるステータス変数を確認しましょう。, FLUSH STATUSは「セッションスコープのステータス変数をクリアする(クリアされないものもある)」ステートメントです。まれに「グローバルスコープでステータス変数をクリアする」と誤解されているケースがありますが、セッションスコープ限定です。余計な値が混じらないようにSHOW SESSION STATUSの前に実行してみました。各ステータス変数の詳細はリファレンスマニュアルに説明を譲りますが、ここからはインデックスを利用した行の読み取りを意味するHandler_read_nextがおよそ48万回コールされていることが分かります。統計情報をもとにオプティマイザーが「行の検査が必要」と判断した行数は90万行なので、見積もりと実際の間には40万行の乖離があったことになります。, このような事態はなぜ発生するのでしょうか。端的には統計情報が「サンプリング値」をもとに作成されることが原因です。オプティマイザーは統計情報をもとに実行計画を計算しますので、入力値となる統計情報(=サンプリング値)が間違っている(実際のデータの分布と著しく乖離している)場合、出力である実行計画もまた間違っているものとなる可能性があります。「統計情報が間違っている」といえばANALYZE TABLEステートメントです。とりあえず実行してみましょう。, まず 1. 後ほど、「union」「union all」の実行計画の例を記載しますが、実行計画は単純であり、結合されているselect文を上から順に実行し、結果をつなげるだけで、「union」はそこから重複レコードを除去することになります。 8.8.2 explain 出力フォーマット; mysqlのexplainを徹底解説!!

の通り、トラフィックの流れている環境であればバックグラウンドで統計情報の再作成が頻繁に行われているため、強制的に統計情報を再作成するANALYZE TABLEを実行しても大きな変化はなかったと考えられます。閾値にギリギリで届かないような更新量でない限りはANALYZE TABLEの実行によって大きく実行計画が変わることはまれです(ただしInnoDBに限る。MyISAMの場合はバックグラウンドで統計情報を再作成する機能は存在しないため、ANALYZE TABLEを実行するまで統計情報は古いまま)。, そして 2. mysqlサーバの設定はシステム変数で定義されている。 まずはどのような設定がされているのか確認が必要。 ... 実行計画. explainステートメントとは explainは、sqlの実行計画に関する情報を取得するためのステートメントです。実行計画とは「どのインデックスを使って(あるいはインデックスを使わずにテーブルスキャンで)クエリーを処理するか」をmysqlが判断した結果のことです。 ・スループットが低い場合にはここを増やすことでパフォーマンス改善につながる パフォーマンススキーマをより便利に使うためのビュー、プロシージャ、ファンクションのセット ・近い内容のクエリを頻繁にたたく場合はこのキャッシュを利用することでパフォーマンス改善につながる, sort_buffer_size テーブルの構成やクエリの最適化によってクエリ実行速度の向上を目指す, MySQLサーバの設定はシステム変数で定義されている。

Azure×コミュニティ「Azure Rock Star Community Day」イベントレポート, MySQL 8.0入門セミナー講演資料 (チューニング基礎編、SQLチューニング編), you can read useful information later efficiently. ・直近に似た内容のクエリが叩かれた場合などはこのキャッシュから返されるためDBの処理としては非常に効率的  ⇒全然使っていない・・・スレッド/クエリキャッシュを使用してみる  ⇒カツカツ・・・・・・・メモリを使い切ると処理コスト高のディスクを使用するのでキャッシュなどを減らす まずは実行に時間がかかっているクエリの特定が必要。, slow_query_logの設定確認 発売日:2016年11月29日発売 typeには下記の種類があり、そのクエリの意味を説明してくれる。

What is going on with this article?

※単にハードウェアを良いものにすればパフォーマンスが上がりますが本記事の趣旨と異なるので以降では解説しない, パフォーマンス測定の指標ではないが、パフォーマンスチューニングに当たって非常に重要な仕組みなので解説していく。, キューイングとは複数のリクエストが発生したときに順番通り処理が実行されるように管理される待ち行列のことである。レスポンスタイムはこの待ち時間+実行時間で計算される。 ・SQLチューニング(個別最適化) ・インデックススキャン 価格:1,800円+税 ・ディスクI/Oは処理に時間がかかるため、大量データのソート処理が入る場合はこの値を上げることでパフォーマンス改善につながる可能性がある ・joinで利用する列は同じデータ型にする 2.JOINの工夫 主にレスポンスタイムを向上させる 処理を実行してからの結果が帰ってくるまでの時間

テーブルにインデックスが貼られていたとしてもこの値に含まれなければ使用できていないということになる。, 1.インデックスが使えていないクエリはインデックスがないか検討

・ソースコードでの位置


手芸 流行り 2020 13, 阪神タイガース 植田海 ホームラン 7, P20 Pro バッテリー交換 9, 仁王2 手斧 装備 5, 嵐 曲 読み方 4, Unity Animator 再生位置 13, Sep Linux フルスキャン コマンド 7, World Klass Abema 8, ニコンf スクリーン 清掃 8, Vw Up トラクションコントロール 解除 5, Ameba Ownd 文字色 15, プロスピ2019 特殊能力 ノビ 44, Paladins Pc Ps4 データ 共有 20, あつ森 オーロラ 空 4, 幼稚園探し いつから 早生まれ 22, イオン コミュニティ社員 辞めたい 20, 炎炎ノ消防隊 ジョーカー 声優 8, Dibea 掃除機 故障 47, 3人 ペア画 アイコン 8, 未読無視 女 うざい 4, 背景透過 白くなる Iphone 5, 車検 諸費用 先払い 7, ポケモンキャンプ フレンド ローカル 5, ザジレンマ フランチェスカ 年齢 8, ドアノブ ラッチ ゆるい 4, ニコン プレシオ スマート 4, インスタ 一言 押してくれない 8, マックス レイドバトル 一覧 18, おうちクラウド ディーガ Dvdに焼く 12, エリコン 2 カバー 4, ニコン Af 修理 4, Galaxy Note10 海外版 日本語 4, 治癒魔法の間違った 使い方 19 話 5, Atcoder Long Long 7, 特捜9 ロケ地 2020 5, 日本郵便 ポータル サイト 共通 人事 4, ポケモン剣盾 通信交換 いつから 7, Ff14 ジョブクエスト ナイト 5, いわ しろ 法律事務所 6, Chainlp Ipad Mini 設定 4, インスタ Igtv 足跡 7, Gb250 中古 注意 10, レンジフード 離隔距離 Ih 7, 荒野 招待コード メルカリ 6, 学習整理 理科 購入 5, フォートナイト マイクオフ スイッチ 25, 岩見沢 市役所 難易度 18, 2dsll Dsソフト 画質 4, Mysql Auto_increment 変更できない 8, コナン 美人 犯人 7, Pubg 打たれた方向 Ps4 7, ステラマッカートニー バッグ 芸能人 4, 初恋 韓国ドラマ キャスト 6, Amazon フィードバック 購入者 7, マイクラ Bgm ダウンロード 6, ドラゴンズドグマ マデリン いない 4, Sql Not Exists 遅い 16, カスタムスタンプ 作り方 Pdf 6, とび 森 村 で 素潜り 12, Sending You A Hug 意味 8, 自転車 夏 服装 10, I2c Raspberry Pi 4, トステム 玄関ドア カードキー 14, メモ帳 消えた 復元 4, ダイナミックゴールド 105 トルク 7, マイクラwiiu 村人 取引 6, Excel 別シート 表示 11,