中国地方DB勉強会 in 岡山の登壇資料です。 そのうちここで登壇動画が公開されることでしょう。 肝心なチートシートは以下のとおり。 PostgreSQL gist.github.com MySQL gist.github.com チートシートだけじゃわからない!困ってる! Have Fun Techがバージョンアップのサポートしますのでお気軽にご相談ください。 have-fun.tech まとめ やっぱ中国地方DB勉強会は最高だぜ!
タイムライン的なものをSELECTだけで実装しようと思った時に、Nested LoopなクエリでUsing temporary; Using filesortが出るようなそこそこ遅いクエリになる。その時にMySQLがインデックスをどう辿っているかを知りたかったので調べてみた。MySQLバージョンは8.0.33。 あまり自信はないので、もし間違った話をしていたら教えて欲しい。 どのようなクエリを検証するか タイムラインの取得ができるような、ユーザー・フォロー関係・投稿の3つのテーブルを作る。スキーマは次の通り。 CREATE TABLE users ( id INTEGER PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL ); CREATE TABLE follows ( id INTEGER PRIMARY KEY AUTO_I
こんにちは、M-Yamashitaです。 今回の記事は、MySQLのAUTO_INCREMENTのidが戻ってしまう話です。 以前、RailsとMySQLを使うサービスにて、Mysql2::Error: Duplicate entry 'xxx' for keyが発生しました。このエラーの原因を調べたところ、テーブルでAUTO_INCREMENTとなっているカラムのidが戻って採番されており、その影響でエラーが発生していることがわかりました。当時の私の認識では、AUTO_INCREMENTとなっているidは、戻って採番されることはないと思っていたので非常に驚きました。 そのため、このidが戻る現象について調べて記事にしたいと思い、執筆しました。 なお、この記事ではMySQL 5.7を使用しています。 この記事で伝えたいこと MySQL再起動によりAUTO_INCREMENTのidが戻って採
Amazon RDS for MySQL が、 RDS最適化読み込み (RDS Optimized Reads)をサポート。 インスタンスストアをDBの一時領域として利用する事で、 これまでの環境と比較して、最大50%のSQL処理性能の向上が期待できるアップデートがありました。 今回、RDS 最適化読み込みを有効にした、RDS(MySQL)環境を起動する機会がありましたので、紹介させていただきます。 New – Amazon RDS Optimized Reads and Optimized Writes アップデート内容 RDS(MySQL)で、インスタンスストア(内蔵SSD)を搭載したDBインスタンスクラスが選択可能になりました。 2022年11月時点、 db.m6gd, db.r6gd, db.m5d, db.r5d の インスタンスファミリーが RDS最適化読み込みを利用可能です。
データベースのスキーマを変更するときは、スキーマの変更作業によってテーブルが長期間ロックされてしまわないように注意が必要です。 2019年にリリースされたPostgreSQL 12.0以降では、NOT NULLを安全に追加するためによりよいベストプラクティスができています。まだ知らない人もいるかもしれないので、ここで紹介します。 何が問題なのか?次のようなDDLコマンドを考えます。 -- posts.moderatedをNULL禁止にする ALTER TABLE posts ALTER COLUMN moderated SET NOT NULL;これはテーブルをACCESS EXCLUSIVEでロックしたままフルテーブルスキャンを行います。その間は他のトランザクションはこのテーブルに関する処理を進行できません。 テーブルが小さければこれで特に問題ありません。しかし、postsがそれなりに大
読者対象 ANSI 定義の古典的なトランザクション分離レベルとアノマリーは概ね理解している MySQL/Postgres では理論的な部分がどうなっているのかを知りたい 理論面の前提知識 2022-08-19 追記: 社内勉強会向けのスライドを作成しました。先にスライドを見てから,引用文献およびこの記事を読むと理解が深まると思います。 まず ANSI 定義の古典的な定義を聞いたことが無い方は,以下のリンクを参照されたい。 ANSI 定義に対応する解説はこれらのサイト以外にもたくさんあるため,自分にとって読みやすいと感じる情報をあたってほしい。(既に熟知されている方は十分) 次点で読んでいただきたいのが, @kumagi さんの以下の記事。古典的には 4 つの分離レベルと 3 つのアノマリーだけで説明されていたものの,不十分であることが学術的に指摘され,解像度を上げようとする流れが後になって
以前に SQLでテーブルデータの一括作成、複製 という記事を書いたのですがもう少しかみ砕いて、かつPostgreSQLにも対応した内容で書き直してみます。 RDBMSを利用したアプリケーションを開発していて数千件を超える大量のデータを作成する必要が発生した場合に知っておくと便利なテクニックの紹介です。なお、以下のようなケースを想定しています。 SQLのパフォーマンス検証のために大量のレコードが必要 1テーブルに100万件以上 動作検証・評価作業のためにテスト内容に準じたデータが一定数必要 1セット100件を100セット 事前準備 SELECT文の 直積(CROSS JOIN) を利用します。 事前に一定数のレコードを保持するテーブルが必要です。 ここでは sample というテーブルを作成して 直積(CROSS JOIN) のSELECT文に利用します。 MySQLとPostgreSQLで
読者対象 ある程度データベースに関する知識を持っている,経験年数 1 年以上のバックエンドエンジニア 特定のプログラミング言語に依存する部分は含めないため,すべての SQL 使用者を対象とする また,ゼロからの丁寧な説明というよりは,リファレンス感覚で使える記事という形にまとめる。 RDBMS の対象バージョン PostgreSQL: 9.4 以降 MySQL: 8.0.28 以降 id (データ型と INSERT 時のデフォルト埋め) 導入 一般的に採用されやすいプライマリキー用の値として,以下を考える。 連番整数 MySQL では AUTO_INCREMENT, Postgres では IDENTITY や SERIAL と呼ばれるもの UUID v1: ハードウェアごとにユニークな単調増加値 UUID v4: ランダム値 UUID v7(ドラフト): 単調増加であるタイムスタンプとラ
こんにちは!エンジニアの福間(fkm_y)です。 先日、弊社でデータベースの技術顧問をして頂いてる三谷(mita2)さんに開発部向けのMySQLロックのデータベース勉強会を実施したのでそのレポートをお伝えします。 開催背景 弊社では三谷さんによるデータベース勉強会を定期的に開催しています。以前にもロックに関するMySQL勉強会を開催していたのですが、1年半経過しており参加していない開発メンバーのほうが多くなっていたことやプロダクトの成長によりデッドロックなどのロックに起因する問題が目立ち始めていたことから増強版のMySQLロックのデータベース勉強会を開催することになりました。 概要 データベースのロックについて ロックタイムアウトについて デッドロックについて まとめ データベースのロックについて なぜデータベースにロック機構があるのかから知ることが重要です。性能と安全性を両立するためにあ
新しい Amazon Aurora 3 クラスタ を起動、MySQL 8で利用可能になったウィンドウ関数を含むSQLを試してみました。 AWSチームのすずきです。 2021年11月18日、MySQL 8.0 と互換性を持つ Amazon Aurora 3 がリリースされました。 Amazon Aurora MySQL 3 with MySQL 8.0 compatibility is now generally available 今回、DBエンジンバージョン「8.0.mysql_aurora.3.01.0」の Auroraクラスタを東京リージョンで起動、 新しくサポートされたウィンドウ関数を利用したSQLの実行を試す機会がありましたので、紹介させていただきます。 データベース作成 バージョン指定 Aurora MySQL 3.01.0 (Compatible with MySQL 8.0
最近、MySQLのパラメータの調整をする機会があったのですが、特定のパラメータを変更した際に、メモリの消費量にどう影響するのか、というのを調査する際に、インターネッツを彷徨ったところ、サイトによって書いてあることにバラつきがあったので、自分でもまとめてみることにした。 結論から書くと、参考にしたのは以下のオライリーの書籍「MySQLトラブルシューティング」で、記述が一番わかりやすく書かれていた。 このエントリは、この書籍の 「3.9.3 オプションの安全値を計算する」 にて記載がある内容をまとめたものになる。 MySQLトラブルシューティング 作者:Sveta SmirnovaオライリージャパンAmazon 著者について Sveta Smirnova(スヴェータ・スミルノヴァ): Oracle社MySQLサポートグループ・バグ検証グループの主席テクニカルサポートエンジニアとして毎日MySQ
2021/05/24 サイボウズ開運研修 動画が以下のサイトからリンクされています - https://blog.cybozu.io/entry/2021/07/20/100000 - これに矢印を書きながらぐりぐりやっていたわけなので、資料単体だとわかりづらいと思います…
こんにちわ。せじまです。 さいきん、しばしば庭園や日帰り登山に行って風景写真を撮っているのですが、カメラで写真を撮るという行為は(中略)実行計画を考えながらSQLを書く行為に近しいことだと思いますので、エンジニアの方にはけっこうオススメです。 今日は軽めの話をさっくりさせていただこうかと思います。 はじめに 皆さんは最近のMySQLがJSON型をサポートしているのをご存知でしょうか。「なぜ正規化されていないJSONをRDBMSに格納するのですか!正規化しましょう正規化」という至極ごもっともなご意見もあるでしょうが、 MySQLは5.7からJSON型のサポートをはじめ、8.0でかなり開発が加速している印象を受けます。JSON型がネイティブでサポートされるようになったのは、MySQL5.7のRelease Candidate以降です。5.7 RCがリリースされた2015年あたりから、MySQL
解決したい問題 PostgreSQLなどでは部分Indexが使えることでテーブルの一部分に対するユニーク制約などをDBで実現できたのに、MySQLではそれができないのでつらすぎる問題を解決したい。 今回は、以下のようなユーザーアカウントテーブルに対する操作を例として記載します。 CREATE TABLE IF NOT EXISTS account ( id BIGINT NOT NULL AUTO_INCREMENT, email VARCHAR(255) NULL, create_timestamp TIMESTAMP NULL, update_timestamp TIMESTAMP NULL, del_flg BOOL NOT NULL, -- 0: 有効な会員 1:削除済み PRIMARY KEY(id) ) このときに、del_flg=0の有効な会員に対してのみユニークキー制約をか
こんにちは。クラウド運用チームで SRE をしている飯塚です。 今回は、MySQL のレプリケーション機能を約10年もの間ずっと使ってこなかった私たちが、レプリケーションを使った高可用性構成に移行するための取り組みの中で学んだことについて紹介します。 背景 巨大なテーブルへの primary key の付与 トランザクションサイズが大きい場合には tmpdir に注意 mysqldump で絵文字が消えていないか要チェック mysqldump が Error 1412: Table definition has changed... で失敗する mysqldump したデータのリストアが Duplicate entry 'xxx-yyy-PRIMARY-n_diff_pfx01' for key 'PRIMARY' で失敗することがある mysqldump したデータのリストア時のディスク
注意 mysqlでは、空間テーブルはMyISAMでしか作れません(正確には、InnoDBでもテーブルは作れますがインデックスが張れません。InnoDBで空間インデックスが張れるのは、5.7.4LABリリースからのようです。)。 MyISAMでも問題ない場合は、空間検索速度が速いので空間DB使うべきですが、トランザクションやテーブルロックなどの問題もありますので、InnoDBしか許されない場合は、一次元ハッシュコードを用いる方法を検討してください。 Mysql Reference manual CREATE TABLE IF NOT EXISTS `geo_table` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `geometry` geometry NOT NULL COMMENT 'ジオメトリ', PRIM
AWSチームのすずきです。 Amazon RDS DB インスタンスの負荷を可視化するパフォーマンスインサイト、 DB負荷(Database Load)のグラフ表示のアップデートがありましたので、紹介させていただきます。 Load表示 Bar グラフとして「Bar」、棒グラフの選択が可能になりました。 Line デフォルトでは従来の折れ線(面グラフ)で描画されます。 1分間表示比較 Bar 新しくサポートされた棒グラフ、短時間で収束する突発的な負荷を捉えやすくなりました。 Line 連続した負荷傾向は、従来の面グラフが捉えやすい場合もあります。適宜切り替えてご利用ください。 まとめ Amazon RDS の負荷をモニタリング、性能分析とトラブルシューティングを実施できるパフォーマンスインサイト、 可視化対象や、サポートするDBエンジンの追加など多くの改善が行われています。 MySQL と互
AWS re:Invent 2017で発表のあったAurora Serverlessがいよいよ一般利用可能になりました。早速Aurora Serverlessに触って確認してみます。 大栗です。 AWS re:Invent 2017で発表されていたAmazon Aurora Serverlessが一般利用可能になったので、早速試してみました。 Aurora Serverless MySQL Generally Available Aurora Serverless 概要 AWS re:Invent 2017で発表されていたAuroraの新しい形態の動作モードです。 【速報】新しいDBサービスAurora Serverlessが発表されました! #reinvent AuroraはSQL処理を行うDBインスタンス部分と高可用性な分散ストレージ部分が分離している構成をとっています。Aurora
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く