B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料) 2024年10月12日(土) NTTデータグループ Innovation技術部 藤井 雅雄Read less
MySQL と PostgreSQL は多くの同じ機能と特徴を備えていますが、この2つのリレーショナルデータベース管理システム(RDBMS)には無視できない決定的な違いがあります。 これらの違いについてよくご存じない方のために、簡単に概要を説明します: MySQL は読み取り専用のコマンドを管理するのに適しています。MySQLは読み取り専用のコマンドを管理するのに適しています。 PostgreSQLは、読み書き操作、大きなデータセット、複雑なクエリを管理するのに適しています。PostgreSQLは、読み書き操作や複雑なクエリを管理するのに適していますが、読み取り専用操作には適していません。 MySQLはPostgreSQLよりも少ない機能しか提供しませんが、そのおかげでMySQLは軽量で安定性が高く、処理速度が速いのです。 PostgreSQLは最初からACIDに準拠するように構築されてお
Eymoutiers, France, July 2nd, 2025 We're publishing PostgreSQL Anonymizer 2.3 today, introducing the long awaited replica masking mechanism. Database Administrators can now synchronize a "masked clone" with their production database using PostgreSQL logical replication. Enhanced Privacy Protection for Your Data PostgreSQL Anonymizer is an extension that hides or replaces personally identifiable in
はじめに タイトルにもある通り、Go×MySQL×DockerでAPIサーバーを作ってみました。 はじめは、 ・Goで簡単なREST APIを作ってみる ・Dockerで開発環境を立てる を目的として作っていたのですが、ディレクトリ構成をどうしようか悩んでいろいろ調べているとGo×クリーンアーキテクチャでAPIサーバーを作っている記事をたくさん発見したので、クリーンアーキテクチャやってみよう、ということでやってみました。 ということでこの記事は、 ・GoでAPIを書いてみたい ・Dockerで開発環境をたてたい ・その際にクリーンアーキテクチャを採用してみたい ぐらいの温度感の方におすすめです。 逆に、がっつりクリーンアーキテクチャを勉強したいという方にはあまり参考にならないかもしれません。。 なお、 フレームワークにEcho (https://echo.labstack.com/) DB
MySQLはステートメントの処理中にInternal Temporary Table(以降、内部テンポラリテーブル)を作成することがあります。 内部テンポラリテーブルは、ステートメントを処理するための最適化や結果を保持しておくために用いられる内部的に作成されるテーブルです。よって、ユーザーがこれを直接制御することはできません。内部テンポラリテーブルを使用するステートメントを実行すると内部で自動的に作成され、それが正常終了またはキャンセルされると自動的に削除されます。 内部テンポラリテーブルを必要とするステートメントの処理中の動作としては、まずメモリ内でテーブル(インメモリテンポラリテーブル)を作成します。それが大きくなりメモリ内に収まらないと自動的にディスク上のテーブル(ディスクテンポラリテーブル)に変換します。 また、以前の記事(第107回 CREATE TEMPORARY TABLEに
Database replication is a method that copies changes between databases instances, and is a key component for use cases like high availability, reducing latency between an application and its source data, moving data between systems such as production and test, infrastructure migration, and others. Relational databases such as PostgreSQL typically support an active-standby model of replication, whe
この記事は JPOUG Advent Calendar 2021 16 日目の記事です。 昨日は ora_gonsuke777 さんの「CMAN(Oracle Connection Manager) と ロールベース・サービス/NLB で OCI DBCS Data Guard構成 の Primary接続 をシングル・エンドポイント化してみる。(Oracle Database, Oracle Cloud Infrastructure)」でした。明日は tomo さんの記事です。 Oracle Database Gateway for ODBC の機能により、ODBC ドライバーを使って PostgreSQL データベースに接続する DATABASE LINK を作成します。 Oracle Database Gateway for ODBC Oracle Database Gateway f
本記事では、このOra2Pgを実行できる環境の構築方法と、実際にOra2Pgを実行し、Oracle12cからPostgreSQL用に変換されたオブジェクト定義など作成した結果をお伝えしたいと思います。 Ora2Pgの概要 Ora2Pgとは、Perlで実装されているオープンソースソフトウェアで、OracleまたはMySQLからPostgreSQLへのマイグレーションツールです。 最新バージョンは2019/01/18にリリースされたVersion20.0となっています(2020年6月時点)。 公式サイトはこちらです。 Ora2Pgでできること Ora2Pgで具体的にできることは下記の3つです。 1. オブジェクト定義の移行 変換元データベースに接続してオブジェクト情報を参照し、PostgreSQL用のDDLを作成できます。 また、変換元データベースに接続してオブジェクト情報を参照し、変換先のP
MySQL で Host '〜' is blocked because of many connection errors が出るのってどういうときだっけ…とふと思ったので接続周りを調べてみた。 クライアントごとの連続接続失敗によるブロック マニュアル https://dev.mysql.com/doc/refman/8.0/en/blocked-host.html にはこう書かれてる (DeepL翻訳) システム変数 max_connect_errors の値は、何回連続して中断される接続要求を許可するかを決定します。max_connect_errors が接続に成功せずにリクエストに失敗した後、mysqld は何か問題がある (誰かが侵入しようとしているなど) と判断し、FLUSH HOSTS 文、Performance Schema host_cache テーブルを切り捨てる TRU
オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。 アプリからのクソクエリを変更できない闇の魔術、に対する防衛術[MySQL] 本エントリは闇の魔術に対する防衛術 Advent Calendar 2020の17日目 1.プロローグ 兵隊1「隊長! 今度採用したアプリケーション、バックエンドはMySQLですが、やたら動作が遅いんです」 隊長「そんなときにはな、急いで口で...じゃなくて、一般クエリログを取得して、どんなクソクエリがきているか確認しろ」 兵隊1「わかりました〜、おやか...じゃなくて、隊長」 アイテム1: 一般クエリログ 兵隊1「わか
本連載第1回では、データベース(DB)エキスパートの篠田さんとDBの「これまで」そして「これから」を対談した模様をお届けしました。その中では「NewSQL」と呼ばれる分散SQLDBの使いどころや、それらが解決しようとしている課題などを洞察しました。また分散SQLDBが米国、中国で開発され、そうしたベンダーに投資や人材が集まっている現状も言及しています。 今回は本連載2022年の初めを飾る記事として2021年のNewSQL市場はどう動いたか、各ベンダーの製品リリースを基に解説していきます。 今回対象としたDB製品は、前回の連載でも取り上げた「CockroachDB」「YugabyteDB」「TiDB」の3つとしました。
サーバ統合によって役目を終えた「Azure Database for MySQL」(以下、「Azure MySQLサーバ」)のインスタンスを停止したまま1カ月以上放置していたら、いつの間にか減ったはずのAzure課金が元に戻っていた……。このような経験をしたのは筆者だけだろうか? 本Tech TIPSでは、こうしたAzure MySQLサーバの停止と課金に関する重要な特性について説明する。 Azure MySQLサーバの対象は、特記しない限り「フレキシブルサーバ」とする(廃止が決まっている「単一サーバ」は対象外)。 Azure MySQLサーバは停止すると料金を節約できる デプロイしたAzure MySQLサーバを停止すると、コンピュータリソースへの課金が止まる。つまり、MySQLサーバを実行しているプラットフォーム(Linuxの仮想マシン)部分の料金がゼロになる。 一方、デプロイしたサー
CX事業本部@大阪の岩田です。 現在自分が関わっているシステムではフレームワークにNestJSを、ORMにはTypeORMを採用しています。DBはAuroraのMySQL互換を利用しており、Auroraのリードレプリカを有効活用できるようTypeORMのデータソースでReplicationを指定しています。データソースの指定は以下のようなイメージです。 { type: 'mysql', replication: { master: { host: 'Auroraのクラスターエンドポイント', ...略 }, slaves: [ { host: 'Auroraのリーダーエンドポイント', ...略 }, ], }, } 先日気づいたのですが、上記のように TypeORMのドライバがmysql replicationを指定している という構成だと、replicationで指定したDBとの接続が
この記事は? 著者は、現在こそToCの開発に携わっているものの、SaaS開発に関しては3年以上の設計と実装の経験があります。SaaS開発を行う上で必須となるテナントの分離を行う理由は、他企業へのデータアクセスによるセキュリティインシデントを防ぐためです。この記事では、一般のSaaS開発においてマルチテナント×RLSが有力なアーキテクチャとなり得る理由を説明します。 シングルテナントvsマルチテナント 注) テナントの概念に入門する人のためのパート。適宜読み飛ばしてください。 そもそもテナント(tenant)とは、店舗や事務所などを借りて住んでいる人のことを指します。では、SaaSでテナントとは通常誰のことを指すのでしょうか?テナントとはSaaSが展開するサブスクリプションの契約主で、法人と契約しているSaaSであれば企業=テナントになり、個人と契約しているSaaSであれば個人=テナントにな
1:N な関係でN個の中で最新のレコードだけ欲しい、っていうケースで has_manyなrelationのfirstを取得していくとN+1になりまくってつらいので has_oneで取得できるようにしてeager_loadする方法を調査したメモ 環境 OS: Ubuntu 20.04 Ruby: 3.0.2 Rails: 6.1.4.1 RDB: Postgres 13 薄いプロジェクトを作る FROM ruby:3.0.2-alpine3.12 as ruby ## Development FROM ruby AS dev ENV BUNDLE_FORCE_RUBY_PLATFORM=1 \ CFLAGS="-Wno-cast-function-type" RUN apk update \ && apk add --no-cache \ gcc \ g++ \ libc-dev \ lin
つい先日、我が家にM1 Macが届きました。 「Dockerまわりがつらいよ」という話は聞いていましたが、私もしっかりと MySQL のコンテナが立ち上がりませんでした。 軽くググっても「むむ・・・?🤔」と思う結果だったので、自分でしっかりまとめてみようと思います。 そもそもの問題 M1 Mac で Docker 公式の MySQL コンテナをそのまま使おうとすると、以下のエラーが出て使用できません。 ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries これは雑に説明すると、「このコンテナは ARM64 に対応してないよ」ということです。 そして、 M1 チップは ARM64 アーキテクチャを採用しています。 解決する方法 色々と調べてみると、主に3つの方法があるようです。 arm64v8
mackerel-plugin-mysqlはクエリの実行回数など、MySQLに関する各種メトリックを監視できます。 MySQLのバージョンによりプラグインのインストール方法が異なります。あらかじめプラグインのインストール方法をご確認の上でご利用ください。 プラグインのインストール方法 MySQL 5.7以降、MySQL 8.0以降をご利用の場合 上記より古いバージョンをご利用の場合 監視できるメトリック 標準メトリック MySQL Command MySQL Join/Scan MySQL Threads MySQL Connections MySQL Slave status MySQL Table Locks/Slow Queries MySQL Traffic MySQL Capacity InnoDBに関するメトリック MySQL innodb Rows MySQL innodb
これは、なにをしたくて書いたもの? Goを使って、データベースにアクセスするコードを書いてみたいなぁと思いまして。 sqlパッケージ Goでデータベースにアクセスするには、sqlパッケージを使うようです。 sql - The Go Programming Language sqlパッケージは、SQL(ライクな)データベースにアクセスするための、汎用インターフェースを提供するパッケージだそうです。 Package sql provides a generic interface around SQL (or SQL-like) databases. 基本的な使い方は、こちらを参照。 SQLInterface · golang/go Wiki · GitHub そして、sqlパッケージのインターフェースを実装したドライバーは、こちらの一覧で確認できます。 SQLDrivers · golang
2021/5/7追記:root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ TL;DR しのゆさんの記事どおりでいけた M1 DockerでMySQLを含んだ環境を動かすためにやったこと | shinoyu | zenn https://zenn.dev/shinoyu/articles/74ebacbf0e4e55 root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ Host xxx is not allowed to connect to this MySQL server の対応 | ryo_kawamata | zenn https://zenn.dev/ryo_kawamata/articles/mysql-connect-error M1 Mac で MySQL5.7.28 が platform: lin
Recently, AWS presented its own CPU on ARM architecture for server solutions. It was Graviton. As a result, they update some lines of their EC2 instances with new postfix “g” (e.g. m6g.small, r5g.nano, etc.). In their review and presentation, AWS showed impressive results that it is faster in some benchmarks up to 20 percent. On the other hand, some reviewers said that Graviton does not show any s
go-mysql-serverは、ピュアGoで書かれたMySQL互換のインメモリDBです。 READMEにあるようにサーバとして起動することもできますが、 database/sql/driverのDriverも用意されているので、プロセス内で完結することもできます。 このインメモリDBをいろいろなORMと組み合わせてユニットテストで使う方法を紹介します。 sqlc sqlx GORM ent go-mysql-server/driverの使い方 サンプル実装を用意したのであわせてご覧ください。 https://github.com/makiuchi-d/testdb ⚠ 現在の最新リリース(0.16.0)にはDriverにいくつかバグがあります。 修正PRはすでに取り込まれているので、 go get 時にはlatestではなくHEADを指定して下さい。 修正済みバージョンのリリースは10〜
Ubuntu 20.04 LTS が、2020年4月24日にリリースされた。先日の記事では Ubuntu 18.04 LTS Server からのアップグレードだったが、新規に「Ubuntu 20.04 LTS Server」をインストール... 準備 MySQLサーバとクライアントツールのインストール $ sudo apt install mysql-server mysql-client サービスの起動確認 $ sudo service mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020
Amazon RDSにてAurora(MySQL)クラスタを構築し、そのログを参照していたところ、 rdsadmin というユーザが多数のクエリを発行していることを確認した。 このユーザアカウントの正体がよくわからなかったので何者か調べてみる。 AWSドキュメントに見る rdsadmin Amazon Auroraドキュメントの Amazon Aurora MySQL でのセキュリティ には、以下のような記載がある。 各 DB クラスターに管理サービスを提供するために、DB インスタンスの作成時に rdsadmin ユーザーが作成されます ということで、 rdsadmin はその名前の通り AWS マネージドサービスとしてのアカウントだとわかる。 残念ながらここに記載している管理サービスとは何かの説明はないので 具体的にどのような動作を行うのかはわからない。 また、Aurora(MySQL
2021-03-18 03:21:57+00:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_PASSWORD cannot be used for the root user Use one of the following to control the root user password: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD どうやらdockerイメージのバージョンアップによるものらしいです。 今回はちょっと脳死で暫定対処したので、その方法を紹介します。 2021/03/19追記 こちらの問題はすでに解決済みで、現在は作業不要です。 また、こちらの記事では不具合の内容としてMYSQL_ALLOW_EMPTY_P
メジャーバージョンのアップグレード 商用環境への適用前に、いずれのアップグレードも徹底的にテストすること。 メジャーバージョンアップグレード中、必要に応じて RDS によって MySQL バイナリ mysql_upgrade が実行され、テーブルがアップグレードされます。 メジャーバージョンアップグレード中、RDS によって slow_log および general_log テーブルが空にされます。これらのログ情報を保持するには、メジャーバージョンアップグレードの前にログファイルの内容を保存する。 通常は約 10 分で完了するが、インスタンスタイプによる。 MySQL 5.7 から 8.0 へのアップグレードの事前チェック MySQL 8.0 には 5.7 との非互換性がいくつかある。 MySQL 5.7 から 8.0 へのアップグレードをスタートすると、RDS では、これらの非互換性を検
In PostgreSQL 15, a fundamental change took place which is relevant to every user who happens to work with permissions: The default permissions of the public schema have been modified. This is relevant because it might hurt you during application deployment. You need to be aware of how it may affect you. Creating users Many people work as superusers only. This is not recommended and can lead to se
Oracleの教科書でSQLを学んだ方なら、文字列を扱うならvarchar型を使うのはないでしょうか。しかし、MySQLでは、文字数を気にする必要のないtext型が利用できます。とはいえ、MySQLのtextには文字数の制限があり、長い文字列を扱う場合は注意が必要です。今回は、このようなMySQLのtext型の特徴について解説します。 文字列を格納する基本 データベースを利用する情報システムはたくさんありますが、そういったデータベースでは必ずのように文字列を格納しています。そして、文字列を扱うデータベースを作るには、MySQLならvarchar型とtext型が利用できます。まずは、この2つの文字列を扱うデータ型について解説します。 文字列を扱うならvarcharが基本 国際標準のSQLの規格では、文字列を扱うデータ型として、固定長のchar型、または、可変長varchar型が定義されていま
※この投稿は米国時間 2023 年 8 月 3 日に、Google Cloud blog に投稿されたものの抄訳です。 はじめにデータベースのパフォーマンスは、日常業務の効率と効果に影響を及ぼすため、どのようなビジネスにおいても重要です。低速なデータベースはトランザクションの処理を遅延させ、顧客満足度や収益性に悪影響をもたらす可能性があります。 Cloud SQL for PostgreSQL は、Cloud SQL Insights と SQLcommenter によるデータベース オブザーバビリティを備えており、デベロッパー ファーストのアプローチを使用してデータベースのパフォーマンスの問題を診断、検出、予防できます。 Cloud SQL for PostgreSQL は、データベースの接続と接続解除およびクエリ実行に関するメタデータを記録できる追加のデータベース ログをサポートしてい
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く