なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

MySQL

RDSがAuroraより速い!?について調べてみた

長くなりそうなので、先に要点だけ。 Twitterで先日の「RDSの方がAuroraより速いケース」の件、とりあえず調べたい範囲のベンチマーク取れた。元記事って2000万件*5=1億件を1クライアントで処理してるのな。で、普通に?HammerDB TPC-Cで多重度上げてもRDSが…

MySQLのデータ投入順序とデータファイルサイズのお話

穴があったら埋めたい! ということで、埋まっていたと思ったら空いていたMySQL Advent Calendar 2020 - Qiita の22日目、急遽登板です。小ネタにしては、エビデンス収集・整理に時間のかかるネタになってしまいましたが。 データ投入順とプライマリキーの関…

MySQLとPostgreSQLのランダム関数の挙動の違い(小ネタ)

MySQL Advent Calendar 2020 - Qiita の11日目の記事であり、同時に、PostgreSQL Advent Calendar 2020 - Qiita の11日目の記事です。両データベースについての挙動差のお話です。 MySQLとRAND関数の挙動の整理 その1 - なからなLife MySQLとRAND関数の挙動…

MySQLとRAND関数の挙動の整理 その2

MySQL Advent Calendar 2020 - Qiita の4日目の記事です。 昨日の記事 MySQLとRAND関数の挙動の整理 その1 - なからなLife の続きです。よって、前提条件も同じで MySQL 5.7.32 (エビデンスはこちらで取った) MySQL 8.0.22 CentOS7 on VirtualBox での挙動…

MySQLとRAND関数の挙動の整理 その1

MySQL Advent Calendar 2020 - Qiita の3日目の記事です。昨年のアドベントカレンダーは1つも記事も書かなかったので、今年は1つくらいは。。。 (ていうか、アドベントカレンダーのタイトルがMySQLだったりMySQL Casualだったりしてるのね) MySQLでテーブ…

MySQL ShellのdumpInstance()、dumpSchemas()をAWS RDS&AuroraMySQLに対して使用する

※初回執筆時から、追記・修正があります。MySQL Shell 8.0.21で存在した各種制約は、MySQL Shell 8.0.22によって緩和されています。 MySQL ShellのdumpInstance()/dumpSchemas()とは MySQLからのダンプエクスポートといえば、mysqldumpでした。しかし、シリ…

SELECT FOR UPDATE NOWAIT他のオプションにおける、MySQL、PostgreSQL、Oracleの挙動

MySQL8.0から、SELECT FOR UPDATE NOWAIT/SKIP LOCKEDがサポートされました。 パチパチパチ、といっても、MySQL8.0自体は2018-04-19にGA(8.0.11)していますし、この機能自体は8.0.1(2017-04-10, Development Milestone)のリリースノートですでに登場して…

MySQL8.0.21の「Redoログ無効化」で大量書込処理を加速する

7/13 に MySQL 8.0.21 がリリースされました。 リリースノートを読んでいて「Functionality Added or Changed」の3つ目に InnoDB: Redo logging can now be enabled and disabled using ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOG syntax. This funct…

AWS RDSの各種DBにおけるメモリ管理の指定方法

超親切設計な、インスタンスサイズからの自動計算、だけど パラメータグループには、デフォルトでDBInstanceClassMemoryからの自動計算になっていて、インスタンスサイズの変更時に手動でパラメータ変更をする必要がないような超親切設計になっています。し…

MySQLのゾンビプロセスの話

エビデンス的なものを貼り付けてもイマイチ伝わらないので、文字通り雑記レベルで。 複数セッション用意してタイミングに依存した実験の結果を伝える時、難しいよね、ってことで、ダラっとした解説になってしまいます。 MySQLのサーバーに重いクエリを投げつ…

MySQL8.0.18新機能「EXPLAIN ANALYZE」で外部結合の実行計画が取れなかった件

祝:8.0.18リリース! 今回のメンテナンスリリースは盛りだくさんです。詳細は、リリースノートを読んでいただくか、今度の9/21(月)に更新されるであろうMySQL Weeklyを確認してください。リリース前から話題沸騰だったのは、「NestedLooop一本勝負っだったM…

HammerDBをCLIで使うなど:まとめ、あるいは、目次の代わりに

「10回分の目次」的な何か 2週間平日連載?で10回に分けて書いてきた「HammerDBをCLIで使う」のエントリのリストです。(1)環境構築 (2)MySQLにTPC-Cを実行してみる (3)PostgreSQLにTPC-Cを実行してみる (4)OracleにTPC-Cを実行してみる (5)Re…

HammerDBをCLIで使うなど(7):MySQLにTPC-Hを実行してみる

基本的な流れ ここからは、分析系クエリのベンチマーク「TPC-H」です。 やりかたは、TPC-Cとほとんど同じなので、淡々と進めていきます。 TPC-Hは、定められた22本1セットの分析クエリ(要はMySQLがあまり得意としない複雑でデカイSQL)についての処理性能…

HammerDBをCLIで使うなど(2):MySQLにTPC-Cを実行してみる

基本的な流れ どのDBに対して、どのワークロードをかける場合でも共通ですが、まずは「MySQLにTPC-C」を実行して、その流れを見ておきます。 GUIで一度経験しておくと、イメージがよりつかみやすいかもしれません。 DB種類選択 ベンチマーク種類選択 スキー…

HammerDBをCLIで使うなど(1):環境構築

TPC-C、TPC-Hワークロードを各種DBMSに対して実行できるベンチマークソフト「HammerDB」 HammerDBは、フリーでOSSなDBMSベンチマークソフトです。 各DB専用に用意されたベンチマークソフトではなく、同じ条件(同じソフト)で負荷をかけて性能を見たいときに…

CentOS + Python3 + Jupyter NotebookでRDBMSに対する分析環境を作る

Jupyter Notebook環境構築エントリとか、世の中に溢れかえっているのは承知の上なんで、ほぼ自分用の備忘です。 未来の自分に語りかけてます。この手順、絶対忘れる。。。 皆さんよく使うゴリゴリのPython+pandasなど各種ライブラリではなく、「RDBMSの中身…

MySQLで直感的じゃない動きをするRAND()とSYSDATE()について

端的にいうと SELECTのWHEREの条件の「右辺」に、RAND()やSYSDATE()のような非決定性関数を使うと、想定外のことが起こる。 戻ってくる行数が想定と異なる。 Indexが効かなくなる。(テーブルフルスキャン走る) どっちもなかなかのインパクトです。 追記:2…

RDS for MySQLで変更すべきパラメータチューニング

呼ばれたきがしたので soudai.hatenablog.comなお、InnoDB限定のお話ですよ。MyISAMを(システムテーブル以外で)使ったことない若輩者なので。ちょっと余裕がないこともあり、思いつく最小限のことだけ書きます。追加で思いついたら後ほど&温かいフォロー…

MySQL 8.0.14でSELECT COUNT(*)は、バッファに載っていても載っていなくても加速する! - 「innodb_parallel_read_threads」検証その5

MySQL 8.0.14でSELECT COUNT(*)が加速する!- 「innodb_parallel_read_threads」検証その1 - なからなLife MySQL 8.0.14でSELECT COUNT(*)が加速しない!- 「innodb_parallel_read_threads」検証その2 - なからなLife MySQL 8.0.14で全件 COUNT(*)でも加速…

MySQL 8.0.14でSELECT COUNT(*)がパーティションテーブルでも加速する! - 「innodb_parallel_read_threads」検証その4

ココまでのおさらい MySQL 8.0.14でSELECT COUNT(*)が加速する!- 「innodb_parallel_read_threads」検証その1 - なからなLife MySQL 8.0.14でSELECT COUNT(*)が加速しない!- 「innodb_parallel_read_threads」検証その2 - なからなLife MySQL 8.0.14で全…

MySQL 8.0.14で全件 COUNT(*)でも加速しない!?- 「innodb_parallel_read_threads」検証その3

MySQL 8.0.14でSELECT COUNT(*)が加速する!- 「innodb_parallel_read_threads」検証その1 - なからなLife MySQL 8.0.14でSELECT COUNT(*)が加速しない!- 「innodb_parallel_read_threads」検証その2 - なからなLife の続きです。まさかの、ネガティブ情…

MySQL 8.0.14でSELECT COUNT(*)が加速しない!- 「innodb_parallel_read_threads」検証その2

「その1」と真逆のタイトル atsuizo.hatenadiary.jp の続きです。要するに、innodb_parallel_read_threadsの効果がないケースの話です。いや、思った以上に、効果がない。。。 というわけで、暗い感じのスタートになりましたが、前回の続きで 「3.「innodb_…

MySQL 8.0.14でSELECT COUNT(*)が加速する!- 「innodb_parallel_read_threads」検証その1

それは突然やってきた MySQL 8.0.14がGAされました。dev.mysql.comまあ、MySQLは結構な頻度でリリースがありますし、「GAとはなんぞや」との名言が生まれる程度に、マイナーリリースでも機能が増える、パラメータが増える、既存パラメータのデフォルト値が変…

MySQLをAWS RDSで使うときに注意すること

MySQL Casual Advent Calendar 2018 - Qiita 14日目の記事です。MySQLネタで書くと、Casualといいつつ、わりとCasualじゃない話になりがちなので、Casualレベルのお話を。 いや、あんまり優しくない制限の話なんだけど。。。 AWS Relatioal Database Service…

Waiting for table metadata lockの対処の仕方、おさらい。

MySQL Casual Advent Calendar 2018 - Qiita 8日目の記事です。 駆け込み。 やきなおしです。 わりとニーズがあるらしく、このネタで過去エントリにちょいちょいアクセスがくるので、とにかく急いでいる人用に、シンプルにまとめました。 MySQL5.6、5.7で使…

MySQLへのJDBC接続で、とあるバグを踏むまでの話 -(3)古いmariadb-client-javaにて、ヤバイ動き 

3エントリに渡ってお送りしています (1)「max_allowed_packet」の基本的な働き (2)「Connector/J」は結構賢い (3)古いmariadb-client-javaにて、ヤバイ動き MySQL本体同様、JDBCドライバにもforkプロダクト「MariaDB Connector/J(mariadb-client-j…

MySQLへのJDBC接続で、とあるバグを踏むまでの話 -(2)「Connector/J」は結構賢い

3エントリに渡ってお送りしています (1)「max_allowed_packet」の基本的な働き (2)「Connector/J」は結構賢い (3)古いmariadb-client-javaにて、ヤバイ動き Javaで開発するときにお世話になるヤーツ MySQLをDBとして採用したとき、アプリケーション…

MySQLへのJDBC接続で、とあるバグを踏むまでの話 -(1)「max_allowed_packet」の基本的な働き

3エントリに渡ってお送りいたします (1)「max_allowed_packet」の基本的な働き (2)「Connector/J」は結構賢い (3)古いmariadb-client-javaにて、ヤバイ動き 概要:max_allowed_packetとは 平たく言うと、MySQLのクライアントーサーバー間の通信のパ…

MySQL Workbenchで、Spatial Functionの結果を図で表示する

「できるらしい」という話だけで、誰も触ってなかった? clubmysql.connpass.com に参加して、坂井さんからGISにまつわるお話をたっぷり伺ってきました。で、坂井さんも、「MySQL WorkbenchがGIS対応してるらしいって聞いたことがあるけど、触ったこと無い」…

SELECT文をタイムアウト強制終了させる「MAX_EXECUTION_TIME」使ってる?

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの9日目のエントリとなります。 実行が長引いたSELECT文を強制終了させるヤーツ MySQL5.6まで、正常に処理が進んでいて遅いSELECTをタイムアウトさせるシステム変数はありませんでした。 正常に処理が進…