タグ

mysqlに関するlesamoureusesのブックマーク (79)

  • プロファイリングで快適MySQLチューニング生活

    MySQL 5.1からデフォルトで有効になっている便利な機能としてプロファイリングというものがある。MySQL 5.0でも利用出来たのだが、実験的な機能という位置づけであり、搭載されていたのはGPL版のMySQL Community Server限定だった。MySQL 5.1からは全てのエディションでプロファイリングを利用することができる。 プロファイリング機能を利用すると、クエリの状態(特に状態遷移やリソースの消費状況)を詳細に分析できるのでとても便利だ。MySQLエンジニア必携の機能といって良いだろう。というわけでプロファイリング機能の使い方を説明しよう。 MySQLサーバにログインしたら、まずは次のようにしてプロファイリングを有効にする。 mysql> SET profiling=1; すると、クエリの情報が記録されるようになる。次に、分析したいクエリを実行する。クエリはなんでもいい

    プロファイリングで快適MySQLチューニング生活
    lesamoureuses
    lesamoureuses 2021/06/22
    “テンポラリテーブルが小さ過ぎて、テンポラリテーブルのサイズ上限に達してしまうと、内部的にMyISAMテーブルに変換される”
  • Waiting for table metadata lockとオンラインDDLについて【MySQL5.6】 - 銀行員からのRailsエンジニア

    MySQLで「Waiting for table metadata lock」のエラーが発生して、詳しく知りたくなったので、関連しているオンラインDDLとともに調べ、手元で試してみたことをまとめました。 MySQLのバージョンは 5.6、ストレージエンジンは InnoDB です。 この記事の多くは、MySQL 公式ドキュメントの以下のページを参考に書いています。 公式ドキュメント①:14.11.1 オンライン DDL の概要 公式ドキュメント②:14.11.2 オンライン DDL でのパフォーマンスと並列性に関する考慮事項 DDLとは オンラインDDLとは オンラインDDLに対応しているDDL Ruby on RailsのMigrationでオプションをつける方法 オンラインDDLの注意点とWaiting for table metadata lock が発生するケース Waiting f

    Waiting for table metadata lockとオンラインDDLについて【MySQL5.6】 - 銀行員からのRailsエンジニア
    lesamoureuses
    lesamoureuses 2020/10/01
    “「ALGORITHM=INPLACE」は、テーブル全体のコピーが必要ない INPLACE 方式でDDLを実行することを指定し、「LOCK=NONE」はDDL中にロックせずに並列DMLを可能にすることを指定します”
  • ISUCON10 予選問題の解説と講評 : ISUCON公式Blog

    ISUCON 10 予選問題作問担当の @yosuke_furukawa です。ISUCON 10 の予選お疲れさまでした。このブログでは、 ISUCON 10 の予選問題の解説と講評を行います。 問題については下記のURLにて公開されています。 http://github.com/isucon/isucon10-qualify 動作確認をしたい場合は README.md を確認の上、検証してみてください。 課題アプリケーション ISUUMO について ISUCON10 の予選の問題は、 ISUUMO と呼ばれるイスに合う物件を検索するサイトでした。せっかくリクルートが作問担当になったので、リクルートならではのものにしたいのと、ずっと社内ISUCONでポリシーとして持っていた「実際に起きているパフォーマンス問題に近い課題を設定したい」という思いから作りました。 今回の問題は位置情報を使った

    ISUCON10 予選問題の解説と講評 : ISUCON公式Blog
    lesamoureuses
    lesamoureuses 2020/09/18
    へー “降順と昇順が組み合わさった ORDER BY は デフォルトでインストールされてる MySQL 5.7 では単純に index を貼っても効きません”
  • MySQL 8.0 vs 外部キー制約 vs ALTER TABLEでメタデータロック待ちになったら疑うこと

    TL;DR MySQL 8.0(細かくは8.0.4っぽい)とそれ以降は「外部キー制約を持っているテーブルにSELECTするとそのテーブルの親テーブルにもメタデータロック(MDL)を置くようになった」 MDLであるがゆえに foreign_key_checks をOFFにしようが 無効化はできない MySQL :: WL#6049: Meta-data locking for FOREIGN KEY tables WL#6049 “Meta-data locking for FOREIGN KEY tables” and WL#11059 · mysql/mysql-server@6626f76 これ以降にもいくつかコミットが続いている 論より証拠。 サンプルスキーマはこんなかんじ。 CREATE TABLE `item` ( `item_id` int NOT NULL, `registe

    MySQL 8.0 vs 外部キー制約 vs ALTER TABLEでメタデータロック待ちになったら疑うこと
    lesamoureuses
    lesamoureuses 2020/08/21
    “MySQL 8.0(細かくは8.0.4っぽい)とそれ以降は「外部キー制約を持っているテーブルにSELECTするとそのテーブルの親テーブルにもメタデータロック(MDL)を置くようになった」”
  • MySQL :: MySQL Terminology Updates

    Why was “source” chosen? MySQL Asynchronous Replication is a change stream. Each replication configuration has a source and does not imply what role a server should have in the overall database architecture. Therefore, the use of e.g. “primary” does not fit, especially when replication is used to build database architectures topologies including bidirectional replication, multi-tiered replication,

    lesamoureuses
    lesamoureuses 2020/07/02
    “e.g. SHOW SLAVE STATUS becoming SHOW REPLICA STATUS.”
  • データベース設計の際に気をつけていること - 食べチョク開発者ブログ

    皆さんこんにちは、エンジニアの西尾です。 新しい機能・サービスを開発する際、私は特にデータベース設計に気をつかいます。 データベースはシステムの土台です。 土台が不安定だと、その上に積み上げていくアプリケーションコードがいびつなものになり、つらい思いをします。 また、一度動き出してしまったシステムのデータベース設計を変えるのは、容易なことではありません。 データベース設計には”これだ!”という正解はないと思っています。 サービスの特徴、システムの性質、toB向け/toC向け、Readが多い・少ない、Writeが多い・少ない。 その他もろもろの背景により、データベース設計の仕方も変わってきます。 このテーブルは正規化していないから駄目だ、この設計はいわゆるポリモーフィック関連だから使ってはいけない、などということはありません。 アンチパターンと呼ばれるものも時と場合によっては正解になります。

    データベース設計の際に気をつけていること - 食べチョク開発者ブログ
  • Rails 6.0で"Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1."という警告が出たときの対処法 - Qiita

    DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :name attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator. (翻訳) 非推奨の警告: UniquenessバリデータはRails 6.1で「強制的に大文字小文字を区別する比較」をしなくなります。Userモデルの:name属性について引き続き「大文字小文字を区別する比較」を使い続けたい場合は、uniquenessバリデータに対して明示的にcase_

    Rails 6.0で"Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1."という警告が出たときの対処法 - Qiita
    lesamoureuses
    lesamoureuses 2020/05/28
    “DB側のcollationが大文字小文字を区別するようになっていれば、Railsのuniquenessバリデータの振る舞いとミスマッチがなくなるので警告は出なくなります”
  • [MySQL]オプティマイザトレースでわかるインデックス選択の理由 - ランサーズ(Lancers)エンジニアブログ

    こんにちは!QA (Quality Assurance) チームの まみー です。入社してもうすぐ3ヶ月。早いものです。 ところでみなさん急ですが… スロークエリ見てますか? インデックス貼ってますか? そのインデックス、当に使われてる? お話しすること 複合インデックスを作成したのに、別の複合インデックスが使われてしまう。 Why…なぜに… その理由を知ることができる オプティマイザトレースの使い方 をお話しいたします。 すぐに使い方を読みたいというかたは コチラ からご覧ください。 こんなことありませんか? 実際に以下の現象が発生していました。 1テーブルだけの JOINが遅い 解決のために インデックス貼った インデックス貼ったのに 解決しなかった 実行計画(EXPLAIN)を見たら 違うインデックスが使われていた スライド紹介 2月に開催した Lancers x ROBOT PA

    [MySQL]オプティマイザトレースでわかるインデックス選択の理由 - ランサーズ(Lancers)エンジニアブログ
    lesamoureuses
    lesamoureuses 2020/03/25
    “resultsのmodifiedよりもstatusのほうがバイト長短そうですよね。そうすると1ページに入るインデックス行数はstatusのほうが多い→コスト試算の段階でstatusを使った方がmodifiedを使うよりも低コスト、って判断”
  • MySQL オンラインDDL(ロックなしによるサービス無停止でDDLを流す方法) パターン集 - Qiita

    職場でオンラインDDLのパターンをより勉強したほうがよいと感じたのでインプットしたことをQiitaにアウトプットしてみた。 以下のリポジトリで実践も合わせて行った。 記事の中で出てくるコードなどはこちらで参照することが可能。 https://github.com/d0riven/learning_online_ddl_pattern 今回はMySQLというDBMSに限定してパターンを紹介しているが、他のDBMSでも使えるパターンはいくつかあるはずなのでPostgreSQLOracleを利用している人が読んでもためになるとは思う。 想定読者 MySQLを普段から触っている人 可用性の高さを求められるサービスを運用・開発している人 古くからあるシステムのリファクタリングのためにデータベースの足回りから手をつけていきたい人 オンラインDDLのやり方を知らない人・知っていても色々なパターンがある

    MySQL オンラインDDL(ロックなしによるサービス無停止でDDLを流す方法) パターン集 - Qiita
    lesamoureuses
    lesamoureuses 2019/12/25
    “DDLに ALGORITHM=INPLACE, LOCK=SHARE を追加することでオンラインDDLが適用できない場合はエラーメッセージを出してくれる”
  • "Not Exists" なクエリの最適化 - いちいの日記

    某所でのネタだったんですが、少し追加情報があったのでここに書いてみます。 以下、mysql4.1での話。それ以外では、確認してないどころかどうなのか想像すらつきません(postgresとかほとんど触ったことない)。 なぞなぞ 次のようなテーブルがあるとします。 CREATE TABLE ( user_id INT NOT NULL, item_id INT NOT NULL, price INT NOT NULL, PRIMARY KEY (user_id, item_id) );mysql> select * from test; +---------+---------+-------+ | user_id | item_id | price | +---------+---------+-------+ | 1 | 100 | 30 | | 1 | 200 | 80 | | 2 |

    "Not Exists" なクエリの最適化 - いちいの日記
    lesamoureuses
    lesamoureuses 2019/12/12
    “MySQL によって t2 内のマッチするレコードが検索されると、t2 は t2.id ではないと認識され、t2 内の同じ id を持つ残りのレコードのスキャンは行われない”
  • EXISTSとSQLの高速化について - 猫好きモバイルアプリケーション開発者記録

    SQL高速化についてはいろんなサイトで取り上げられているので 今更取り上げる必要はないかと思っていましたが、 ふと最近仕事をしている中でハマっている人が多いポイントであると感じたため 改めて書いてみることにしました。 EXISTSが速いという誤解 EXISTSについて書かれたサイトを見ると、 「速い」というような記述を見かけることが多いかと思います。 しかし、これはあくまでサブクエリを組んだ場合に、INやイコールを使って比較するときと比べて速い場合が多いというだけであり、 EXISTSが速いというわけでは決してありません。 ハッキリ言ってしまうと、EXISTSを使うクエリは基的に遅いです。 これは正確に言うと、EXISTSを利用するケースにおいて相関サブクエリが使われていることが原因で遅くなっています。 相関サブクエリとはどういうものか、以下にメンバー情報を格納した MEMBER テーブ

    lesamoureuses
    lesamoureuses 2019/12/12
    “EXISTSは積極的にJOINへ置き換える”
  • MySQLでINSERTのデッドロックに嵌る人を1人でも減らすために - ichirin2501's diary

    この記事ははてなデベロッパーアドベントカレンダー2015の12月24日の記事です。 昨日は id:stefafafan さんのエンジニア英語でした。 こんにちは、こんばんは。 クリスマス・イヴですね、皆さんはどのような一日を過ごされる(た)のでしょうか。 僕は一人です。 改めまして、先日初めての合コンを経験/失敗して二度と行かないと誓った はてなの id:ichirin2501 です。今回は小ネタとしてMySQL(InnoDB)のBULK INSERTにおけるデッドロックの話をしようと思います。ただ、外部キー制約が絡むと複雑になるので今回は触れません。それについてはこちらを参照ください。 あ、タイトルはオマージュです*1。 Topic 検証環境 INSERTのデッドロック 避けられないケース もしくはロックする リトライ処理に注意 初期データ Duplicateの場合 Deadlockの

    MySQLでINSERTのデッドロックに嵌る人を1人でも減らすために - ichirin2501's diary
    lesamoureuses
    lesamoureuses 2016/02/23
    へーそうなんだ “InnoDBは全ての行が生成出来てから全部のロックを獲得するのではなく、生成しながらロックを獲得します”
  • ActiveRecordをutf8mb4で動かす - Qiita

    もうMySQL 5.5 GAが出てから一年が経ち、MySQL 5.6 GAもそろそろ出るころだし、新規で作るアプリケーションはutf8mb4でいきたいのでその方法。 まず、mysql2が0.3.11以前のバージョンではutf8mb4に対応してないので、それより新しいバージョンを使う必要があります。 これでencoding: utf8mb4で接続できるようになります。 つぎにActiveRecord::Migrationでutf8mb4なデータベースを作成するようにコンフィグでcharsetとcollationを指定します。

    ActiveRecordをutf8mb4で動かす - Qiita
    lesamoureuses
    lesamoureuses 2016/02/10
    The maximum column size is 767 bytes にハマってた
  • 挿入と参照ロックに疲れ果てた俺たちは - ichirin2501's diary

    なかったらINSERTしたいし、あるならロック取りたいやん? from ichirin2501 www.slideshare.net 出来事 @ichirin2501 とりあえず何も考えずこの前のロックの話をSlideshareにあげてくれ!!— 柴崎優季 (@shiba_yu36) 2015, 8月 22 はじめに これは先日の社内勉強会で発表したもので、MySQLで特定の問題を解決したいときのノウハウ話です。特定の問題とは、アプリを書いてると「データがなかったINSERTしたい、あるなら排他ロックしつつ取得したい」という要望があったりします。例えば、あるユーザーアクションで初期値もパラメーターで渡されるケースで、データがないならそのままINSERT、既にデータがあるなら取得して状態に依存して更新処理を行いたい場合などです。見かけのロジックは単純に見えますが、MySQLでこれを実現しよう

    挿入と参照ロックに疲れ果てた俺たちは - ichirin2501's diary
    lesamoureuses
    lesamoureuses 2015/08/25
    昔進研ゼミでやった記憶があるけど全然覚えていなかった
  • #yapcasia でMySQL 5.7の罠についてLTしてきました

    ネタ的には 発掘するたび書き溜めてきたブログ記事 から 笑いが取れそうなものを 大事そうなもののみをピックアップして紹介した感じです。 知らないと致命傷、でも知ってれば予防できる(はず) MySQL 5.7で不幸になる人が1人でも少なくなってくれることを願っています。 さて、今年のYAPC::Asiaはメイントラックもトークを応募していたのですが見事に落選したので、1日目は完全にリラックスして過ごしました。LTの採否、当日になるまでわかんないのか大変だなーとか、他人事だったんですが、 1日目のLT見るじゃないですか。 面白いじゃないですか。 俺もしゃべりたくなるじゃないですか。 なったんですよ!!1 が、翌朝になってLTの応募ページをたどってみると

  • にひりずむ::しんぷる - MySQL で SELECT のときにユーザー変数を代入して使う

    知らなかったのでメモ。 mysql> SELECT @foo := UNIX_TIMESTAMP(), FROM_UNIXTIME(@foo) +--------------------------+---------------------+ | @foo := UNIX_TIMESTAMP() | FROM_UNIXTIME(@foo) | +--------------------------+---------------------+ | 1331202141 | 2012-03-08 19:22:21 | +--------------------------+---------------------+ @variable := expr で変数に代入し、それをその場で使うことができる。いままでは SET @variable = expr してからしか使えないのかなーと思って

    lesamoureuses
    lesamoureuses 2015/06/15
    :=が思い出せなくてどうやるんだっけってなったのでメモ
  • MySQL: Sort GROUP_CONCAT values

    In short: Is there any way to sort the values in a GROUP_CONCAT statement? Query: GROUP_CONCAT((SELECT GROUP_CONCAT(parent.name SEPARATOR " &raquo; ") FROM test_competence AS node, test_competence AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.id = l.competence AND parent.id != 1 ORDER BY parent.lft) SEPARATOR "<br />\n") AS competences I get this row: Crafts » Joinery Adminis

    MySQL: Sort GROUP_CONCAT values
    lesamoureuses
    lesamoureuses 2015/06/01
    GROUP_CONCAT の使い方をまた一つ覚えた “GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')”
  • MySQLのコンソールを便利にするための5つのTips – sawara.me

    MySQLクライアント何使ってますか。え?標準のmysqlコンソール使ってない? CUIはちょっと敷居が高いと思っているあなたのために、mysqlコンソールを便利にするためのTipsを紹介します。 1. 表示結果にページャを設定する コンソールが嫌われる一番の理由に、SQLの検索結果が多いと最初の方の結果が流れていって見えなくなってしまうことにあるのではないでしょうか。そして取得フィールドが多いと画面の右端で折り返されてわけわからん状態に。 そんな時は迷わずpagerにlessを指定しましょう。 pager less -S mysqlコンソール上で上記コマンドを実行するとSQLの検索結果をlessで見ることが出来ます。-Sオプションを指定することで右端で折り返されずに綺麗に表示されます。lessの機能そのまま利用できますので、検索とか出来たり便利です。lessを終了する場合にはqを入力しま

    MySQLのコンソールを便利にするための5つのTips – sawara.me
    lesamoureuses
    lesamoureuses 2015/05/08
    へー、初めて知った ““¥! コマンド”とすることでmysqlコンソール上からもLinuxのコマンドを実行することが出来ます”
  • 快適mysqlコマンド★カスタマイズの決定版 - (ひ)メモ

    この記事は MySQL Casual Advent Calendar 2013 の25日目の記事です。 自分の過去のブログも含めて、mysqlコマンドのカスタマイズについていろいろな情報がありますが、わたしがオススメの秘伝のタレをまとめたいと思います。是非、ご参考に。 定型文(SQL)のショートカット入力 「show create table TABLENAME\G」とか「select user,host,password from mysql.user order by user,host;」とか、よく実行するけど長くて入力するのがめんどうなのがありますよね。それをショートカットで入力できるようにする方法です。 mysqlコマンドで行編集ができるのは、readlineやlibeditをリンクしているおかげです。 従来の公式バイナリ配布物に含まれるmysqlコマンドはreadlineでした

    快適mysqlコマンド★カスタマイズの決定版 - (ひ)メモ
    lesamoureuses
    lesamoureuses 2015/04/22
    読んでなかった。.editrc が必要なのか
  • MySQL と寿司ビール問題 - かみぽわーる

    MySQL と Unicode Collation Algorithm (UCA) - かみぽわーる に関連するトピックで、 MySQL には寿司ビール問題というのがある。 寿司ビール問題どっかで詳しくお話を聞くべきだよなぁ。。。— RKajiyama (@RKajiyama) March 18, 2015 これはどういう問題かというと、 MySQL の Unicode では binary collation にしてコードポイントで比較しないと🍣と🍺に限らず絵文字が同値判定されるという問題です。 あれ? MySQL の utf8mb4 charset って、4バイト文字同士を比較すると同じ文字扱いされる? SELECT '🍣'='🍺' → 1 MySQL的には寿司とビールは同じ扱い。— とみたまさひろ (@tmtms) December 22, 2014 MySQLで select

    MySQL と寿司ビール問題 - かみぽわーる
    lesamoureuses
    lesamoureuses 2015/03/23
    難しい。辛い。