概要 RDB(リレーショナルデータベース)を運用していると、複数のトランザクションが同じデータに同時アクセスしようとする場合に「デッドロック」が発生することがあります。デッドロックとは、あるトランザクションが必要とするリソースが別のトランザクションによってロックされ、さらにそのトランザクションも他のリソースのロック解除を待っているため、互いに進行できなくなってしまう状態を指します。

概要 RDB(リレーショナルデータベース)を運用していると、複数のトランザクションが同じデータに同時アクセスしようとする場合に「デッドロック」が発生することがあります。デッドロックとは、あるトランザクションが必要とするリソースが別のトランザクションによってロックされ、さらにそのトランザクションも他のリソースのロック解除を待っているため、互いに進行できなくなってしまう状態を指します。
概要 この記事では、SQLクエリをより効率的に記述するためのベストプラクティスとテクニックに焦点を当てています。データベースのクエリはシステム全体のパフォーマンスに直結するため、最適な書き方を知ることは重要です。インデックスの効果的な活用方法、適切な結合の選択、そして条件の効果的な書き方など、SQLの最適化に関する具体的な手法を解説します。各SQL文に関する実行計画の結果も掲載していますので、ぜひご確認ください。 なお、Oracle19cとOracle12cでの利用実績がありますが、他のデータベースやバージョンにおいての検証は行っておりません。 新しい情報は随時追加されますので、お楽しみにしてください。 SQLの最適化に関連する基本的なアイデア 以下の通りと考えています。 1.インデックスの利用 2.正しいJOINの選択 INNER JOIN、LEFT JOIN、RIGHT JOINなど、
はじめに Web アプリケーションを開発している皆さん! 日夜性能問題に悩まされていると思います😅 本記事では性能問題における 「CPU 使用率の見方」 に焦点をおいて話そうかと思います! CPU あるある CPU にまつわる謎? は大体次の2ケースかな〜、と思います。 ① クエリ応答が遅いからスケールアップ! → あれ?変わらないぞ? Web アプリ開発していると、API 応答が遅い → 原因は重いクエリ (SQL) というケースはよくあるかと思います。当然速度改善したいです。お金で簡単に解決できるならそうしたい。 例えば RDS のインスタンスタイプ db.r5.xlarge を今使っているとしましょう。 vCPU 数は 4 です。これを 2倍性能 の db.r5.2xlarge にしましょう! db.r5.xlarge db.r5.2xlarge
Amazon RDSにてAurora(MySQL)クラスタを構築し、そのログを参照していたところ、 rdsadmin というユーザが多数のクエリを発行していることを確認した。 このユーザアカウントの正体がよくわからなかったので何者か調べてみる。 AWSドキュメントに見る rdsadmin Amazon Auroraドキュメントの Amazon Aurora MySQL でのセキュリティ には、以下のような記載がある。 各 DB クラスターに管理サービスを提供するために、DB インスタンスの作成時に rdsadmin ユーザーが作成されます ということで、 rdsadmin はその名前の通り AWS マネージドサービスとしてのアカウントだとわかる。 残念ながらここに記載している管理サービスとは何かの説明はないので 具体的にどのような動作を行うのかはわからない。 また、Aurora(MySQL
はじめに この記事ではHerokuにデプロイしたアプリのDBを、ローカルから参照する方法を解説します。 前提として、PCにHerokuをインストールしていることと、Herokuにアプリをデプロイしている必要があるため、それらの作業がまだ出来ていない人は以下の記事を参考にして設定を終わらせておきましょう。 https://qiita.com/ysda/items/5719c894254aa898aed1 この知識が役立つ場面 ・本番環境でのみバグが起こっている 本番環境のDBに入っている何らかのデータが原因という場合もあります。 こういう時に、本番のDBを参照して確認してみましょう。 ・卑猥な言葉や差別用語が投稿されてしまった アプリをデプロイすると誰がどんなデータを作るかわかりません。 ブログアプリを例にすると、いつの間にか卑猥な言葉や差別用語の含まれた記事が作られる可能性があるわけです。
<?php /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | Al
はじめに クラウドサービス多すぎる。 なんとなく使いたいものは決まっているのですけど、自己学習も兼ねてふわっとサービスレベルを比較してみる。 VPS/PaaS/FaaSの比較はこちら: 【クラウドVPS/PaaS/FaaS比較】最低料金とサービスレベルの比較 前提 無料枠で何ができるんだろう?の比較 個人開発レベルで何を選ぶかの選定に使う程度の比較 エンタープライズとして何を使うかレベルの詳細な機能比較ではない 初回登録時の「〜ドル分のクレジットをプレゼント!」みたいなのは、無視してます。 AWSとGCPとFirebaseとHerokuとMongoDB@Atlasの比較 最初に世の中全てのクラウドを比較しようとしてモチベーションが死にそうになった 選定基準は、「【比較してみた】みんなが使っている個人開発(Webサービス)向けPaaS・ホスティングサービス」でよく使われていたもの DBのカテ
2020/9/30追記 本記事は元々、「SQL記述者全員が理解すべきSELECT文の実行順序のお話」というタイトルで投稿しておりました。 しかし、知見のある方からのコメントと自分でも調べてみた結果、今回紹介している順序はあくまで論理的な処理順序であり、実行順序とは別物ということがわかりました。 誤った知識を布教してしまい申し訳ございません。 2020/9/30のタイミングで、本記事のタイトルを「SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話」に変更させていただきました。 はじめに 「SQLといえば、エンジニアが扱うスキル」と思われがちですが、最近はマーケターや営業など、非エンジニアの方もSQLを使って、自らデータを抽出し分析する方が増えてきています。 またエンジニアの方でも、ORM任せでなんとなく理解している状態の方もいるのではないでしょうか? 今回は、そんな方々にこそ
株式会社オズビジョンのユッコ (@terra_yucco) です。 今日はトラブル対応中に出くわした MySQL の小ネタ。 トラブルの内容 抽出ロジックにミスがあり、特定のアクションをしてから 60 分後までにはお知らせが飛ぶ予定だったのですが、それが一部の条件で飛ばなくなっていました。 対応自体は処理を修正して完了しましたが、影響を受けた人の抽出タスクが残ります。 2 つの日付の差分を取りたい 特定のアクションをしてから 60 分後までにはお知らせが飛ぶ予定 なので 特定のアクションをした日時 実際に対応後お知らせが飛んだ日時 がわかれば、取得は可能です。 幸い、この 2 つの値は timestamp 型で DB に入っていました。 MySQL で timestamp 型の差分を出したい 【誤】減算 timestamp 型は名称からして Unix の Epoch 秒なのかと思っていたの
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Disclaimer 当記事はNewSQL開発ベンダの技術ブログや各種論文、その他ニュースサイト等の内容を個人的にまとめたものです。 そのため、理解不足等に起因する誤解・誤認を含む可能性があります。更なる理解が必要な方はリファレンスに挙げた各種文献を直接参照下さい。技術的な指摘は可能であれば取り込み修正しますが、迅速な対応はお約束できません。 NewSQLの解説は二部構成 当記事は前編でNewSQLの概要編となる。 全体の目次は下記である。 NewSQLとは何か NewSQLのアーキテクチャ NewSQLとこれまでのデータベースの比較
Laravelと複合プライマリキー 既存の複合プライマリキーを持つMySQLのテーブルに対する操作で混乱したので備忘録。 複合キーはLaravelでは有名なネタのようですが、幸いにもこれまで対応する機会はありませんでした。 事情によりサロゲートキーは導入できない前提です。 mpywさんよりコメントで便利なトレイトを教えていただいたので、公開半日もせず大幅に改稿しました。 HasCompositePrimaryKey トレイトの導入 mpywさんより教えていただいたトレイトです。 https://github.com/mopo922/LaravelTreats/blob/master/src/Model/Traits/HasCompositePrimaryKey.php 含まれている LaravelTreats をまるごとインストールします。
この記事は本番環境でやらかしちゃった人のアドベントカレンダー2日目の記事です。 内容的にそろそろ時効だと思うので供養のために書きました。 追記。そういえば時期をちゃんと書いてなかったけど事件が起きたのは去年2018年、つまり仕込み(ヲイ)は2017年の話です ぶっちゃけネタ記事ですw (たまたま見つけて参加してみただけなのに昨日の記事の伸びっぷりを見て戦々恐々としてる TL;DR DB移行作業において、テスト期間中は常に最新のデータで処理できるように書いておいたプログラムをcrontabで実行していた。最終的に本番に合わせて日時を調整していたが、そのことを失念し1年後に再実行されてしまい、本番データが1年前に巻き戻る事故発生。 crontab は分、時、日、月、曜日を指定できるが、1年後に帰ってくるから気をつけてね。という話。 惨劇はなぜおこってしまったのか 結論から言えばcrontabの
この記事の目的 自分は、とある会社様の元でソシャゲの API 開発をさせていただいています。 ソシャゲは、リリース時やイベント時などに集中アクセスされやすく、負荷軽減の知識がない状態で開発を行ってしまうと、運用時に緊急メンテ祭りになりやすいジャンルかなと思っています。 これまで培ってきた MySQL の知識ですが、脳内メモリ量の関係上、暗記できないのでメモしておこうというのが主目的です。 ここ数年ほどソシャゲ開発しかしていないため、偏っている感がある内容ですのでご注意ください。 概要 ストレージエンジンは InnoDB。メインで扱っている MySQL バージョンは 5.6。 記事の内容ですが、これらのキーワードを見て、おおよそ分かる方は読む必要はないかと思います。 インデックス系 クラスタインデックス カバリングインデックス EXPLAIN で注意するべき値 トランザクション系 MVCC
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 概要 名著SQLアンチパターンを読み終えたので、それの復習のために悍ましいデータベースを作ろうと思った。 まず前半では、SQLアンチパターンを意図的に盛り込み、目も当てられない酷い設計をします。 そのあとリファクタリングを行なったER図に書き直していきます。 なお、真面目に書くと参考書の丸写しになってしまうので、この記事は アンチパターンもりもりのER図を見て嫌悪感を学習し、設計に役立てようという趣向のもと、詳しい説明は省きます。 とても良い本なので読んでください。 想定するシステムの概要と状況 目的において適切かはわかりませんが、とり
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く