なからなLife

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

MySQL

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をタイムアウトさせるシステム変数はありませんでした。 正常に処理が進…

MySQLの「Communications link failure...」の解決方法を調べていて、よく見つけるヤツ

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの5日目のエントリとなります。 みんなだいすきお困りの、アレです。 Oracleだと「ORA-03113:通信チャネルでファイルの終わりが検出されました。」っていう、酷い日本語*1で有名なヤツがあるけど、MySQL…

MySQL 8.0をカジュアルに立ちあげる

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの2日目のエントリとなります。 きっかけ、前提 MySQL8.0、まだRCの状態だけど、色々な機能追加の話題が盛り上がっている中でのAdvent Calendarでもあるので、MySQL 8.0新機能検証なネタを投下してくれ…

MySQLのGLOBAL_STATUSとGLOBAL_VARIABLES

今更MySQL5.7を扱うにあたって MySQL5.6とMySQL5.7のパラメータ差分をあらためて見直してたら、「show_compatibility_56」という、プロダクトのアーキ移行期間にありがちな「いかにも」な名前のパラメータがありまして。 これは何? 「SHOW [GLOBAL] STATUS…

MySQLの「CREATE TABLE .. SELECT/LIKE」の挙動の違い

テーブルの複製のとき、お世話になります。 ちょっとしたバックアップ目的や、検証作業用にテーブルを複製するシーンはよくあります。 MySQLでは、テーブルの複製のためのコマンドが大きく2種類あるので、その違いを確かめた結果のお話です。 CREATE TABLE …

MySQLのサーバーステータス変数の監視の話

mysqlクライアントから定期実行してたし、計算は別途やってた。 SHOW [GLOBAL ]STATUSで取れるのは、「サーバー起動からの累積値」または「コマンド発行時の瞬間値」という仕様のため、前者について推移を知りたいときは、 ・定間隔でコマンド発行してファイ…

MySQLでmetadata lockにハマりやすいパターン

しばらくブログエントリあげてませんでしたが、引き続きMySQL関係のお仕事していたので、復活弾もやっぱりMySQLネタです。 そもそも 「metadata lockって何よ?」 とか 「Waiting for Table metadata lockでハマったらどうしたら良いの?」 って話は、過去に…

MySQLのセッションタイムアウトの制御

timeout系パラメータはいくつかあるけれど 新規接続時のタイムアウト(connect_timeout)ではなく、一度確立した接続がタイムアウトで切断される現象に影響するタイムアウト設定のお話。 ERROR 2013 (HY000): Lost connection to MySQL server during query…

MySQLの文字列型の扱い

先日、この記事が公開されていたので gihyo.jp アレ?って思ってドキュメント見直して、手元の環境でも実行してみました。 確かに「その通り」だったのだけど、ドキュメントに書いてあるとおりのこと、かつ、「その一部」の話だなーとおもったので、もうちょ…

MySQLでキャラクタセットを変更する

キャラクタセットはカラムレベルで持っている Oracleの場合はデータベースレベルで持っているキャラクタセット定義ですが、MySQLの場合、キャラクタセットはカラムレベルで持っています。ですので、同じデータベース、テーブルの中で、カラムによって別々の…

MySQLで幸せになれるヤツの続き-列名の行は都度いらなくない?

atsuizo.hatenadiary.jp で挙げたワンライナーを見て、タイトルのような疑問を持った人もいるかと思いますので、そのへんの補足です。 お好みでどうぞ 「-N」オプションを付与すると、SQL実行毎に表示される列名の行を除外して出力させることができます。 な…

MySQLで幸せになれるヤツの続き-パスワードを隠蔽する方法

パスワードをゴニョゴニョする前に atsuizo.hatenadiary.jpで パスワードを生テキストで書くなって人はゴニョゴニョしてください。 って書いた話の件ですが、なんでこんな話になるの、ってところをまず押さえましょう。 mysqlクライアントでのログイン方法あ…