MANABIYA ( https://manabiya.tech ) で話した資料です。
MANABIYA ( https://manabiya.tech ) で話した資料です。
最近、寒暖の差が激しいですがみなさん体調は崩されていないでしょうか? こんにちわ。モニプラ for Facebookを担当しています高橋です。 サービス開始当初は問題なかったものの稼働が高くなりデータ量が多くなって クエリのパフォーマンスが悪化すること…よくありますよね? 今回はクエリチューニングの基本的な手順とケース別に解決方法を解説したいと思います。 クエリチューニングの手順 1.スロークエリログで問題のクエリをあぶり出す まずはどのクエリが問題なのか特定する必要があります。 アプリケーション側でクエリの実行時間を測定し自前でログを出力しておくというのも手ですが、 お手軽にMySQLの設定で一定時間以上掛かったクエリをログに出力しておくことができます。 スロー クエリ ログ(MySQL 5.1 リファレンスマニュアル) mysqldを–log-slow-queriesオプションつきで起
概要 AWS Database Migration Service 略称DMSを使って、水平分割されたDBインスタンスを縮退しようと計画していましたが、検証中に不具合らしきものを見つけたので中断しました。この記事はDMSを検証中に引っかかったトラブルや対策について書いていたメモをまとめたものです。今回の記事中で説明する内容は実環境からぼかしている箇所がありますがご容赦ください。 ※ この文章での「メンテナンス」という単語は、ゲームシステムのメンテナンスを指しており、AWS側のメンテナンスとは異なります。 動機 通常DBは基本的にはスペックが不足したらスケールアップを行い対応します。弊社では加えてより大規模な負荷でも耐えられるよう水平分割してスケールアウトも併用する構成になっております。規模の拡大時には問題無いのですが、必要とされる負荷が下がった場合や、サービスの使われ方が変わって別のサブシ
今回はデータベースの正規化について取り上げます。 PostgreSQL固有ではなく、RDBMS全般に関わる一般的なテーマですが、データベースを扱う上で重要な下地となる部分ですので、ぜひ基礎固めとしてご利用ください。「正規化」はOSS-DB Exam Silverの出題範囲にも含まれていますので、受験を考えている方も気を抜かずに取り組みましょう。 データの重複をなくし整合的にデータを取り扱えるようにデータベースを設計することを、データベースの正規化と呼びます。正規化を行っておくと、データの追加・更新・削除などに伴うデータの不整合や喪失が起きるのを防ぎ、メンテナンスの効率を高めることができます。 正規化の段階には、第1~第5正規形およびボイスコッド正規形がありますが、ここでは、データベースを設計する際に一般的に用いられる第1~第3正規形までを、前回登場したテーブルをもとにして説明していきます。
MySQLコマンドでVARIABLESを変更する方法を調べました。 環境 MySQL5.7 MySQLのVARIABLESとは MySQLのVARIABLESとは以下のコマンドで表示されるシステム変数です。 mysql> SHOW VARIABLES like 'char%'; +--------------------------+------------------------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8
MySQL方言にはMINUSとかEXCEPTが無いので、集合の差分を表現するのが意外と面倒くさい。大抵の場合、相関サブクエリでNOT EXISTSを使ったSQLを書くことになる。 一般従業員を示すemployeeとリーダー職を示すleaderという二種類のテーブルがあるとする。 CREATE TABLE employee ( id INT NOT NULL, PRIMARY KEY(id) ); CREATE TABLE leader ( id INT NOT NULL, PRIMARY KEY(id) ); employeeにはleaderの中身も含まれているとする。さて問題。employeeではあるが、leaderではないidを洗い出したい。 employee集合からleader集合を引くことができれば、該当のid群を洗い出せる。
重複行を削りたいならunionを使う。重複行を生かしたいならunion allを使う。 ここまではよいとして、どっちでもよい場合、例えば 重複行があり得ない場合 IN句のサブクエリなので重複行があってもなくても結果に影響しない場合 にどうするか。 以前はunionをデフォルトにして、重複行を生かしたいときだけunion allしていたが、今は逆に、union allをデフォルトにして重複行を削りたいときだけunionする、という方針にしている。理由はいくつかあるが、allを付けると Sort->Unique の処理が走らないのでパフォーマンス上有利になるはず、というのが大きい。 絶対に重複行が発生しないことが分かっているクエリでも、unionを使うとSort->Uniqueの処理が走ってしまうDBMSは多い。 例えばPostgreSQL: UNION bench=# explain ana
MySQLのレプリケーションはデフォルトでは非同期で行われます。そのため、マスターの更新が必ずスレーブへ転送されたか保証はしません。 これを実現するしくみとして、MySQL5.5とそれ以降からは準同期レプリケーション機能を使用できます。今回は準同期レプリケーションについて紹介します。MySQLのバージョンは最新の5.7.21を使用しています。 準同期レプリケーションとは 準同期レプリケーションは、マスターの更新がスレーブに適用ではなく、伝搬されたことを保証する仕組みです。 コミットしたトランザクションはマスターから1台以上(オプションで変更可能)のスレーブに伝搬し、受け取ったスレーブ(I/Oスレッド)が通知をマスターに返したところでコミットが完了となる仕組みです。よって、スレーブ側で適用されたことまでは保証されないので、完全同期ではなく準同期と呼ばれます。 更新データの伝搬後にSQLスレッ
こんにちは、池田です。ついにAmazon Echo Plusの購入招待メールが届きました。それはもう、宝くじで100,000円以上に当選したくらいにテンションがあがりました(実際には、宝くじで5桁以上の当選をしたことがないので想像なんですけれど)。 2018/07/13 追記:EFSが東京リージョンでも提供開始されたので、一部追記しています。 今回もAWSホワイトペーパーからのネタとなります。WordPress:Best Practices on AWSを読み、紹介されていたベストプラクティスについて筆者なりにまとめてみましたのでご紹介したいと思います。興味のある方はぜひ原文にも目を通してみてください。 もくじ AWSでWordPressを構築する3つの基本的な方法 Amazon Lightsail 複数サーバでの運用 AWS上にWordPressを構築するメリット ステートレスな構成を維
サーバーレス エクスポートでは、一時インスタンスの作成に時間がかかるため、標準エクスポートよりも時間がかかります。最短でも 5 分以上かかりますが、大規模なデータベースの場合は、さらに時間がかかることもあります。使用するエクスポート方法を決定する前に、時間、パフォーマンス、費用への影響を検討してください。 SQL ダンプファイルの作成時に正しいフラグを使用する データを SQL ダンプファイルにエクスポートするときに正しいフラグを使用しなかった場合、インポートが失敗する可能性があります。Cloud SQL にインポートする SQL ダンプファイルの作成については、SQL ダンプファイルの作成をご覧ください。 コスト削減のためデータを圧縮する Cloud SQL では、圧縮ファイルと非圧縮ファイルの両方のインポートとエクスポートがサポートされています。特に大きいインスタンスをエクスポートする
バイナリログを一覧表示する % mysql -h aurora01.******.ap-northeast-1.rds.amazonaws.com -u awsuser -p 5.6.10-log awsuser: [mydb] 01:27> show binary logs; +----------------------------+------------+ | Log_name | File_size | +----------------------------+------------+ | mysql-bin-changelog.000165 | 134218106 | | mysql-bin-changelog.000166 | 134218041 | | mysql-bin-changelog.000167 | 134218041 | (中略) | mysql-bin-c
この章では、mysql クライアントプログラムを使用して、簡単なデータベースを作成して使用する方法を示すことで、MySQL のチュートリアルを提供します。mysql (「端末モニター」または単に「モニター」と呼ばれることもあります) は、MySQL Server への接続、クエリーの実行、および結果の表示を可能にするインタラクティブなプログラムです。mysql は、バッチモードでも使用できます。クエリーを前もってファイルに入れておき、mysql にファイルのコンテンツを実行するよう指示します。 ここでは、mysql の両方の使用方法について説明します。 mysql で提供されているオプションのリストを表示するには、--help オプションを指定して mysql を起動します。 shell> mysql --help この章では、mysql がマシンにインストールされていることと、接続可能な
MySQL 8.0 comes with improved defaults, aiming at the best out of the box experience possible. Here we describe the changes and why they are made. Introduction Generally speaking, a good default is “the best choice for most users, most of the time”. In respect of the existing user base we do not want to change a default just for the sake of it, so a change should have a good reason attached. As yo
sysbench をインストールして MySQL のベンチマークをとる手順をメモ。 インストール $ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash $ sudo yum -y install sysbench mysql ベンチマーク 初期データロード $ sysbench /usr/share/sysbench/oltp_read_write.lua \ --db-driver=mysql \ --table-size=100000 \ --mysql-host=aurora01.*********.ap-northeast-1.rds.amazonaws.com \ --mysql-user=awsuser \ --mysql-passwo
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く