transqlate transpile SQL snippet from a dialect to another using an AST
はじめに MySQL(InnoDB)でSQLのパフォーマンスチューニングをするときに役に立つ知識をエッセンスとしてまとめました。結合(JOIN)やB-treeインデックスの探索の仕組み、実行計画の基本的な見方を紹介します。 想定する読者は、SQLのパフォーマンスを改善する必要があるが実行計画をみてもいまいちピンと来ない方です。インデックスの作成の経験や、複合インデックスやカーディナリティの知識があることを前提にしています。目標は、実行計画の内容がよく分からない読者が、実行計画をみただけでクエリが実行される様子をイメージでき、自信を持ってクエリの改善にあたることができるようにすることです。 ストレージエンジンはInnoDBを前提としています。また、インデックスはB-treeインデックスを想定しています。全文検索の転置インデックスや空間検索のR-treeインデックスについては触れません。 イン
PostgreSQL isn’t just a simple relational database; it’s a data management framework with the potential to engulf the entire database realm. The trend of “Using Postgres for Everything” is no longer limited to a few elite teams but is becoming a mainstream best practice. OLAP’s New Challenger In a 2016 database meetup, I argued that a significant gap in the PostgreSQL ecosystem was the lack of a s
ずいぶんご無沙汰のブログ記事となりました。 今回は、設計を一新して速く、頑強になった PG-Strom v5.0 をご紹介します。 なぜ再設計が必要だったのか? 前バージョンの PG-Strom v3.x シリーズの基本的な設計は、2018年のPG-Strom v2.0の頃から大きく変わっていません。 当時の最新GPUモデルは Volta 世代(TESLA V100)で、CUDAのバージョンは9.2ですから、かなりの大昔という事はお分かり頂けると思います。 この頃、PG-Stromの開発において最優先すべき課題は、先ず実用となるバージョンをリリースする事でした。(※ HeteroDB社の創業は2017年7月です) クエリの処理速度を高速化する事は当然なのですが、それ以上に、まだPG-Stromの内部インフラも十分に枯れていない中で、クラッシュせずに走り切る事や、バグがあったとしても容易に原
新潟市に本社がある民間放送の「テレビ新潟」はサイバー攻撃を受けて、社内のネットワークに接続されているサーバーや端末に不具合が生じたと発表しました。 放送への影響はなく、これまでのところ、個人情報の漏えいなども確認されていないとしています。 「テレビ新潟」によりますと、11日、社内のネットワークに接続されているサーバーや複数の端末が内部データが暗号化され、正常に動かなくなっていることが確認されました。 社内で調査した結果、外部からサイバー攻撃を受けたと判断し、警察などに相談したということです。 サーバーや端末の不具合は11日午後7時の時点で復旧していませんが、社内のネットワークからは隔離する対応をとっているということです。 番組制作に関わる端末やサーバーもありましたが、放送への影響はなく、これまでのところ、個人情報の漏えいなども確認されていないとしています。 「テレビ新潟」は今後、システムの
Amazon Web Services ブログ Amazon Aurora MySQL 3 の MySQL 8.0 互換版が一般提供 Amazon Aurora は、クラウド向けに構築された MySQL および PostgreSQL 互換のリレーショナルデータベースです。Aurora は、従来のエンタープライズデータベースのパフォーマンスと可用性と、オープンソースのデータベースのシンプルさとコスト効率を持ち合わせています。Amazon Aurora MySQL は MySQL 5.7 と互換性に加え、 MySQL 8.0 とも互換性があります。MySQL 8.0 互換の Aurora MySQL 3 が一般提供されています。 Aurora MySQL 3 は、共通テーブル式 (CTE) のサポート、ロールベースの認証、レプリケーションの強化、ウィンドウ関数、インスタント DDL など、いく
パワポのスライドと箇条書きが人間を駄目にする 今から20年前の2003年、データの可視化やインフォメーションデザインの先駆者として有名なイエール大学の教授エドワード・タフティが「パワーポイントの認知スタイル」というエッセイを発表しました。 彼はこのエッセイの中で、パワーポイントのようなスライド形式はプレゼンテーション自体の質を低下させ、余計な誤解や混乱を招き、さらに言葉の使い方、論理的な説明、そして統計的な分析といったものが犠牲になるため、スライドをつくる人の思考回路にダメージを与えると主張します。 こうした主張に賛同する人は現在でも多くいて、その典型的な例がアマゾンです。アマゾンではミーティングの前に文章形式の資料が配られ、ミーティングの最初の5分はそれぞれがこの配られたレポートを黙って読むことから始まるという話は多くの方も聞いたことがあるのではないでしょうか。(リンク) 実は、アマゾン
TL;DR TiDBにおけるパフォーマンス検証をどうやって行ったか パフォーマンス検証を行ったときにつまづいた問題とその対応策 TiDBの仕様やアーキテクチャなどの話はありません 前提 対象のDBはAmazon Auroraで稼働中 DBエンジンはMySQL TiDBに移行できないかPoCを実施 DB周りにいろんな課題があり、TiDBで解決できないか検証 TiDB Cloudで検証 本番運用を想定してTiDB Dedicatedを利用 先にお伝えしたいこと TiDB導入したいとか言う前に、今使っているRDBで発生しているスロークエリとかIndex設計を見直した方が良いです笑 理由はこの記事を見てもらえるとわかると思いますw パフォーマンス検証の進め方 1. パフォーマンス検証に利用するクエリを洗い出す 観点としては以下の2つ 実行される頻度が高いSQL 実行速度が遅いSQL(スロークエリ)
Log Explorer: monitor security events without third-party storage03/08/2024 This post is also available in Français, Español, 简体中文, 繁體中文, 日本語, 한국어 and Deutsch. Today, we are excited to announce beta availability of Log Explorer, which allows you to investigate your HTTP and Security Event logs directly from the Cloudflare Dashboard. Log Explorer is an extension of Security Analytics, giving you th
本セッションではPC/スマートフォン向けゲーム『ガールフレンド(仮)』のデータベースの負債とその解消の道のりをご紹介します。 当ゲームではデータベースにMySQLを採用しており、長年の運用を続けていく中で下記のような課題が発生してきました。 「突発的なユーザー増加で更新負荷に耐えられない」 「データ容量が肥大化しパフォーマンスやコストの悪化」 これら課題に対しどのような手段で対応したのか、またその対応によって新たな負債が生まれることとなったその経緯と解決策の歴史を解説します。 https://cagc.cyberagent.co.jp/2024/session/index.html?id=m7XRYTxp Copyright © CyberAgent, Inc.
Google Cloudは、PostgreSQL互換のAlloyDBにAI機能を組み込んだ「AlloyDB AI」正式版を提供開始した。データベースのデータをリアルタイムにAIに反映できる高速なベクトル検索などが可能だ。 Google Cloudは、PostgreSQL互換のデータベース「AlloyDB」にAI機能を組み込んだ新機能「AlloyDB AI」が正式版となったことを発表しました。 AlloyDBはGoogle Cloudのマネージドサービスとして提供されますが、同時に、AlloyDBをローカル環境で実行可能なソフトウェア版の「AlloyDB Omni」でもAlloyDB AIが正式版となりました。 AlloyDB Omniは開発環境などでの利用は無料です。本番環境の利用では有料のサブスクリプション料金が設定されており、Google Cloudによるサポートが提供されます。 企業
こんにちは!Nstockのじゃがです。 NstockではマルチテナントSaaSを開発しており、テナント間のデータ分離にRow-Level Security(RLS)を利用しています。本記事ではRLSの基本から、Nstockでの利用イメージまで、SQL文やアプリケーションコードを交えて解説します。 備考 アプリケーションの実装イメージはSpring Bootですが、多くのフレームワークに存在する機能を利用しています PostgreSQLのRLSについて話しています マルチテナントアーキテクチャとRLS Nstockは初期フェーズであり、人的リソースや金銭的リソースに余裕がありません。テナントごとに異なるDBサーバーやスキーマを用意するアーキテクチャは、リソース的に厳しいです。そのため、複数のテナントでDBサーバーを共有しつつ、 tenant_id カラムを用いてテナント間のデータを分離するこ
前回MySQLのREPEATABLE READとREAD COMMITTEDの違いを知るために色々試した - $shibayu36->blog;という記事を書いたところ、yoku0825さんにMySQL 8.0以降だとperformance_schema.data_locksが使えると教えてもらったので試した。 ちなみに、後ろからロックがぶつかるクエリを実行しなくても、MySQL 8.0だとSELECT * FROM performance_schema.data_locksでロックの範囲を確かめることができます。 ギャップつきロックがInnoDBのスタンダードで、X lockがレコードとギャップのロック、X not gapが単なるレコードロックになります— yoku0825 (@yoku0825) February 27, 2024 テーブル定義 CREATE TABLE `posts`
完成物 ER図 画面遷移図 figma, 原寸画像 AWS構成図 ※備考※ GitHub Actions CIは構築済みです。 GitHub Actions CD, apiのprivate subnet化にも取り組んでいます。 EC2インタンスは通常時停止です。 技術選定理由 プログラミング、IT業界ともに未経験で着手し独学で作りました。 Go 比較対象:JAVA、Ruby、Python、PHP コンパイラ言語であり実行速度が高速である 静的型付けであり、コンパイル前にバグを発見しやすい 静的型付けかつ記述自由度が低いことから、以下2点を利点と考えた 開発を中長期まで続けた際にも、加筆・改修しやすい 他人のコードを読んだ際に学びやすい Javaも多少書いてみたが、簡素にかけるGoの方がしっくりきた SHOWROOM、IRIAM、Twitch、AbemaTVといった動画配信サービスにも採用さ
このように、層ごとに関心事の分離を行うことで、保守性の高い(変更容易性や再利用性等)アプリケーションを実現できます。 しかし、「トランザクション」においてはどうでしょうか。 トランザクションはビジネス領域においても、技術領域においても関心事がある内容です。 そういう曖昧なものは「ひとまず usecase 層に入れてしまえ」という方針になりがちです。 ですが、DB 固有の知識を usecase 層の関心事にしてしまっては、関心事の分離をするメリットが得られません。 そのため、関心事の分離を実現しつつトランザクション実装をする方法を模索してみました。 前提 1. クリーンアーキテクチャを採用している(オニオンアーキテクチャやレイヤードアーキテクチャも含む) そもそもビジネス知識と技術知識を分離していないアーキテクチャを採用している場合、メリットは得られません。 そのため、オニオンアーキテクチャ
MySQLのトランザクション分離レベルについてふんわりとした理解しかないなと感じた。もう少し理解するために、とくにREPEATABLE READとREAD COMMITTEDの違いを手を動かして色々確認してみた。 以下の記事を参考にした。 [RDBMS][SQL]トランザクション分離レベルについて極力分かりやすく解説 #SQL - Qiita MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.7.2.1 トランザクション分離レベル 大まかな違い 公式ドキュメントを見る限り ノンリピータブルリード、ファントムリードが発生するか 範囲に含まれるギャップへのほかのセッションによる挿入をブロックするか の違いがありそうに見える。 ノンリピータブルリード、ファントムリードが発生するかを試す 以下のテーブルを作る。 CREATE TABLE `posts` ( `title`
今、自分が所属している会社では、いわゆるフルサイクルなアプリケーションエンジニアがほとんどで、SRE のような、システムを運用改善することを専門にするメンバーは居ません。一方でそれなりにプロダクトの数は多く、各種ミドルウェアの運用で困っているのを見かけることがあります。 色々な人が似た問題に悩むのはもったいないので、「MySQL を運用したことがある人からすると、こういう考え方をする」という風な目線で勉強会を行いました。せっかくなので社内の情報を抜いたうえで公開します(同じようなことを色々な場所で言っていて、その都度作り直しているから……というのもあります)。 speakerdeck.com ちなみに DB のどこで悩むかはだいぶ業界ドメインに左右されると思っています(それはそう)。ゲーム業界なんかは、激しくスパイクするワークロードな上にミスったときの機会損失が激しいので、シャーディングを
データベースとテーブルの作成 テスト用のデータベースtestdbを作成し、パフォーマンスチューニングを検証するためのcompanyおよびpersonテーブルを定義します。 CREATE DATABASE testdb; USE testdb; CREATE TABLE company ( company_id INT AUTO_INCREMENT PRIMARY KEY, company_name VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE person ( person_id INT AUTO_INCREMENT PRIMARY KEY, company_id INT, person_name VARCHAR(255) NOT NULL, email VARCH
シードデータで動作確認して大丈夫だったのに、本番反映してみたら想定してなかった挙動・エラーが出た😱そんな経験はありませんか。 恥ずかしながら私は今までに何回もありました。機能開発だけじゃなくバッチやマイグレーションなんかでも発生しがちなコレ。またはシードデータで動作確認できても、本番データでも通用するか検証ができないままプルリクを作る、なんていうこともあると思います。今回はこちらを無くす試みをしたお話です。 「もう本番DBで開発しちゃえばいいじゃない」の問題点 この課題を解決するには、極論すると本番DBで開発するしかないのですが、そうなると言うまでもなく以下の問題が出てきます。 レビュー通過してないコードが本番に影響を与える トライ&エラーができない 個人情報をはじめとするセンシティブな情報が開発者の端末に漏れる データ量が多すぎてローカルに持ってこれない しかし言い換えると、これらをク
はじめに 最近、個人開発する上で DB の選択肢が多く、技術選定をする際に割りと頭を悩ます問題だと思う。この記事では、いくつかのサービスをピックアップして、それぞれの概要やコスト感、機能、制約などをまとめてみる。 あくまでも自分が個人開発に際して技術選定の材料とするもの。 今回対象にするサービス一覧 今回は以下の DB サービスをピックアップして紹介する。 料金などについては、更新が入るかもしれないので 2023 年末の情報ということに留意していただければと思う。(それぞれ公式のリンクを添えておくので、そこから詳細を確認してもらえればmm) Neon Planetscale Render.com Supabase Vercel Storage 候補に上がらなかったサービス Cloudflare D1 Heroku また、選んだ基準としては以下の 2 点を優先している。 無料で使用できるプラ
pgtemp is a Rust library and cli tool that allows you to easily create temporary PostgreSQL servers for testing without using Docker. The pgtemp Rust library allows you to spawn a PostgreSQL server in a temporary directory and get back a full connection URI with the host, port, username, and password. The pgtemp cli tool allows you to even more simply make temporary connections, and works with any
sponsored by PingCAP株式会社 | 制作:Publickey 国内最大級のフリマアプリ「メルカリ」のバックエンドデータベースは、50台以上のMySQLサーバがオンプレミスのデータセンターで稼働しており、40TBを越えるデータサイズのデータベースを保持していると、2023年12月に都内で開催されたイベント「db tech showcase 2023 Tokyo」のセッションで、同社のDBRE(Database Reliability Engineer)を務める本田恭氏が明らかにしました。 そしてそのデータベースの規模の大きさゆえにいくつかの課題もあるため、新たなデータベースの候補として、MySQL互換でNewSQLの代表的なデータベースサービスである「TiDB Cloud」をPoC(Proof of Concept:概念検証)として評価。その結果も発表されました。 メルカリ
CloudbaseはPostgreSQLのORMとしてPrismaを使用しています CloudbaseはAWS, Azure, Google Cloud等のパブリッククラウドを対象にしたセキュリティリスクの検出・管理SaaSです。 個人情報の入ったS3バケットを公開してしまうなどの設定ミスや、近年騒がれたLog4Shellなどの脆弱性をエージェントを使用せず検出し、その修正をサポートするプロダクトです。 CloudbaseではAPIサーバとしてNode.js、DBとしてPostgreSQLを使用し、そのORMとしてPrismaを使用しています。本記事では入門を超えて本番環境でPrismaを使いこなすために必要な知識、弊社がPrismaを運用する中で得た知見を共有していきます。 対象読者 PrismaをRDBのORMとして使っている人 雰囲気でPrismaを使っている人 これからPrisma
メルカリの本番環境で流れているクエリを使って、MySQL互換のTiDB Cloudを評価。40TBを越えるDBの大規模トラフィックに耐えられたか?[PR] 国内最大級のフリマアプリ「メルカリ」のバックエンドデータベースは、50台以上のMySQLサーバがオンプレミスのデータセンターで稼働しており、40TBを越えるデータサイズのデータベースを保持していると、2023年12月に都内で開催されたイベント「db tech showcase 2023 Tokyo」のセッションで、同社のDBRE(Database Reliability Engineer)を務める本田恭氏が明らかにしました。 そしてそのデータベースの規模の大きさゆえにいくつかの課題もあるため、新たなデータベースの候補として、MySQL互換でNewSQLの代表的なデータベースサービスである「TiDB Cloud」をPoC(Proof of
これはなに ども、レバテック開発部のもりたです。最近めっちゃ元気!! 今回は『データベースについて勉強したいあなたに送る技術書17冊(+11冊1講義7link)』として、もりたがここ半年くらいでわーっと集めたデータベース周りの書籍(とか)を紹介していきます。アプリケーションって結局はデータベースみたいなところがあると思うんですが、おれは長いことデータベースをどう学んだら良いのか分かりませんでした。同じような気持ちを抱えているITエンジニアの人もいると思うので、学習ロードマップと合わせて紹介していきます。 なお具体的な対象読者は業務でなんとなくSQL書いてるけど、ウィンドウ関数とか言われると分からんな……くらいの人です。 扱う領域と扱わない領域 扱う領域としてはだいたい以下 再入門本 SQL 内部構造 論理設計 周辺知識 データベース理論 その他高度なもの モデリング、NoSQL、分散データ
PostgreSQL 16 introduces quite a few improvements to the query planner and makes many SQL queries run faster than they did on previous versions of PostgreSQL. If you look at the PG16 release notes, you’ll see some of these planner improvements. But with the volume of changes made in each PostgreSQL release, it’s not possible to provide enough detail about each and every change. So maybe you might
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Solid Queue & understanding UPDATE SKIP LOCKED - BigBinary Blog 原文公開日: 2024/01/23 原著者: Chirag Shah サイト: BigBinary Blog 日本語タイトルは内容に即したものにしました。 参考: 週刊Railsウォッチ20240117: Solid Queue: 37signalsによるActive Job向けDBベースのジョブバックエンド 🔗 Solid Queueについて 最近になって、37signalsがSolid Queueをオープンソースとして公開しました(関連記事)。 Solid QueueはActive Jobで利用できるクエリバックエンドであり、データベース上に構築されます(これと対照的に、SidekiqやResqu
SREの林 aka もりはやです。 タイトルの通りですし、PostgreSQL界隈の皆さんには当たり前のことですが”失敗事例の共有はいくらあってもいいはず”の気持ちで本記事を書いています。*1 TL;DR 詳細 最新バージョンでアプリを移行した矢先にAurora PostgreSQLのv16.1対応が発表 これを受けて、意気揚々とAurora PostgreSQLのバージョンアップを実施 またしてもCPU高騰、そして504多発 調査開始 ZabbixにはSlow queryを出力する機能がデフォルトである クエリチューニングするならEXPLAINを使う ANALYZEを実行することで解決 仕上げのDB全体へのANALYZE まとめ TL;DR 何よりもまず、アップグレードガイドを読みましょう!!!!!! AWS公式ドキュメント _ Amazon Aurora PostgreSQL DB ク
はじめに 以前こんなツイートをしました。 すると、リプライで色々とコメントを頂きました。(疑問を投げかけたら答えてくれる方々、本当にいつもありがたいです🙇♂️) ということで、本記事では推定行数と実際の行数の乖離を減らすために何をやったのかを備忘として書きます。 ただ、実際のSQLや実行計画を書くことはできないので、あくまでどんな考え方をしたのか、ということを書きます。 対処法①(対象のテーブルのautovacuum頻度を変更) 対象のテーブルはかなり更新の激しいテーブルだと聞いていたので、まずは統計情報が最新化されているかを考えました。 更新が激しくてautovacuum時の自動ANALYZEが追い付いていないんじゃないかと考え、対象のテーブルだけ自動ANALYZEの頻度が上がるように設定を変更しました。 PostgreSQLの設定パラメータは基本的にはpostgresql.conf
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く