第2回MySQLチューニング(1) MySQLチューニング、その前に 梶山隆輔 2015-02-17

2015年03月08日17:06 カテゴリ MySQL InnoDBのinsertとlockの話 こんにちは。ECナビでアプリケーションエンジニアをやっている駒崎です。 今回はMySQLのInnoDBエンジンにおけるINSERTとロックの挙動について書きたいと思います。 はじめに アプリケーションでレコードの重複チェックをしてからINSERTをする。テーブルにはUNIQUE制約をかけてデータ不整合が起きないようにしている。という仕様はよくあるケースだと思います。 こういったケースでINSERTしたときにどのような仕組みが働いて重複データを防いでいるのだろう?アプリケーションで重複チェックをしてはいるけどMySQLではどんな挙動をしているんだろう?というのが気になったので調べました。 調べること INSERTした場合のロックの挙動 FOR UPDATE文で排他ロックをかけた場合のロックの挙動
これまでのMySQLでよく問題になった、絵文字や日本語の文字の照合やソート順序の問題に関して、来たるMySQL 8.0では大幅な改善が加えられる予定になっている。この問題の概要と今後の改善方針について、MySQL開発チームからの解説。 免責事項 この記事はManyi Lu氏によるMySQL Server Blogの投稿「Sushi = Beer ?! An introduction of UTF8 support in MySQL 8.0」(2017/1/13)をユーザが翻訳したものであり、Oracle公式の文書ではありません。 MySQL 8.0での私たちの計画として、utf8のサポートを大幅に改善します。utf8サポート自体はMySQL 4.1の頃にさかのぼりますが、いくつかの制限が存在しています。記事タイトルにもある「寿司 = ビール」問題は、バグ#76553のことを指しています。少
MySQLと名前解決 MySQLにおいて名前解決は、コネクションの確立・認証のフェーズで利用されます。デフォルト(名前解決が有効)な場合のシーケンスはざっくりと以下のようになります。 IPアドレスがMySQL内の名前解決キャッシュに載っているかどうかを確認する (載っていない場合) IPアドレスからホスト名に逆引きをかける(getnameinfo) 得られたホスト名を正引きし、IPアドレスを得る(getaddrinfo) IPアドレスとホスト名の両方を使って、接続元ホストの検証をする(第17回 MySQLのユーザー管理について[その1]の2ページ目を参照) 検証に成功した場合、これ以降の「接続元ホスト」はIPアドレスまたはホスト名の「検証に成功したどちらか一方」を利用する ユーザー名、パスワードなどの認証に進む 名前解決が無効(skip-name-resolveオプションが有効)な場合
ちょっとした小ネタです。RDS(MySQL)に於いて、『utf8mb4』に対応した環境が作成出来るか/対応しているかという件で確認する機会がありましたので、当エントリに備忘録的として記しておきます。 目次 『utf8mb4』とは RDS(MySQL)環境の用意 『utf8mb4』に対応したパラメータグループを作成・適用 『utf8mb4』関連パラメータグループ適用後の内容確認 『utf8mb4』とは この『utf8mb4』というもの、文字コードの一種で、UTF8で4バイト文字を扱う事が出来るものらしいです。 MySQLで4バイトのUTF-8文字を扱ってみる - HHeLiBeXの日記 正道編 また、それぞれのバージョンで扱う事が出来るCharacter Setの一覧も以下にメモしておきます。 MySQL :: MySQL 5.1 Reference Manual :: 10.1.13 Ch
与えられたキーワードに合致するデータをデータベースから取得することを考えた時、完全一致であれば「=」で検索を行うと思います。 では与えられたキーワードを「含む」検索、つまり部分一致を行いたいのであればどうするか。最も簡単なのは「search_column like '%キーワード%'」といった形で、「like」を使いキーワードの前後にワイルドカードを与える方法でしょう。 ですがこれを何の気無しに使うのはちょっと危険。 上記のようなlike検索ではインデックスが利用されないため(※)、全レコードをスキャンします。 かつキーワードを部分一致で探したいようなカラムは、文章等の比較的大きなサイズであると考えられます。 そのため検索コストは大きく、数千〜数万行であればまだ良いかもしれませんが、数十万ともなると利用には耐えられないでしょう。(実体験) ※ただし前方一致検索であれば、最初のワイルドカード
こんにちは、@yoheiMuneです。 Python3系でMySQLに接続するには、PyMySQLがサクッと使えていいみたいですね。簡単に使い方をまとめておきたいと思います。 目次 Githubページ PyMySQLはピュアなPython製のMySQLクライアントで、Githubページは以下にあります。GithubのReadMeでは使い方の説明があります。 https://github.com/PyMySQL/PyMySQL/ インストール パッケージ管理を使って簡単に導入することができます。 $ pip install PyMySQL PyMySQLの使い方 PyMySQLを使ってみます。今回は以下のデータがMySQLに入っているとしてお話を進めたいと思います。 CREATE TABLE user ( id INT(11) PRIMARY KEY, name VARCHAR(255) N
皆さん、ご無沙汰しております。 パソコン周辺機器にお金をかけはじめている笹亀です。 エンジニアはパソコンが商売道具なので、 やはり使いやすい物を使いたくなるのは自然な事ですね。 ご参考までに。。。 マウス :Logicool MX Revolution(ビックカメラでポイントで購入 キーボード:Bluetooth Mac用キーボード(会社の人から売ってもらいましたw 今回はTriggerについてご紹介したいとおもいます。 Triggerとは、データの変更などのイベントによってあらかじめ指定した処理を自動的に実行する機能です。 最近使用しているデータベースには必ず備えてある機能です。 Oracle,Postgres,MySQLでも当たり前のようにあります。 実際にはどのようなときに使用するものなのでしょうか? ・特定のテーブルに対しての処理のログをとるため ・特定のテーブルのバックアップを
YAPC::Asia 2015 のセッションで、MySQL のタイムゾーンの話が出ていましたが、以前タイムゾーン周りで少しはまったことがあったのを思い出したので書いてみます。 MySQLのデフォルトのタイムゾーンは mysqld 起動時のシステム設定です。TZ 環境変数の値か、変数が設定されていなければ /etc/localtime(Ubuntu の場合) です。 # TZ=Japan /usr/sbin/mysqld mysql> SHOW VARIABLES LIKE '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | JST | | time_zone | SYSTEM | +---------
今回はConoHaのロードバランサーを使って、1000req/secをさばけるWordPressのクラスタ構成を作ってみます。WordPressの負荷軽減策やスケールアウトはよく語られるテーマではありますが、今回はロードバランサー、イメージ保存、1Gbpsのローカルネットワークなど、ConoHaならではの機能を使って構築してみます。またその際のチューニングポイントなども解説します。こちらはConoHa以外の環境でもきっと有用だと思います。 このページではあまり限界性能を引き出すチューニングを目指すのではく、実際に皆様がConoHa上でクラスタ構成を構築する際に、どういう構成を作れば良いのか、どんなオプションを使えば良いのか、スケールするにはどういうチューニングを行うのか、などの参考にしていただくのが目的です。WordPressは利用者も多く、PHPで書かれていてMySQLへの接続も必要な、
2012年12月03日16:20 MySQL MySQLでDateTime型のカラムをDate型で検索するときに気をつけること 例えばこんなテーブルがあったとして、 DESC products; +---------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | MUL | NULL | | | created_at
目次 原則 MySQL: 大文字小文字を区別させる SQLite3: 『=』で大文字小文字を区別させない MySQL, SQLite3: 『LIKE』で区別させない MySQL, SQLite3: 重複データを探したい 原則下記のような、大文字小文字の種類だけが異なるデータがあるとします。HOGE Hoge hoge下記のSQLを実行すると、大文字小文字は区別されるのでしょうか? SELECT * FROM posts WHERE name = 'hoge' SELECT * FROM posts WHERE name LIKE 'hoge'結果はご覧の通り。 MySQL SQLite3 = 区別しない 区別する LIKE 区別しない 区別しない MySQL: 大文字小文字を区別させるMySQLは特に指定がなければ大文字小文字は区別しません。 では、区別させるには? テーブル作成時に、フィ
MySQLはとても気ぃつかい屋さんである。我々が投げる多少あいまいな指示も頑張って解釈し、なんとか文句を言わずに実行してみようと挑戦してみてくれる。 今日はそんなMySQLがケナゲに解釈してくれる自動変換について紹介しようと思う。この自動変換、ケナゲなMySQLの奥ゆかしさ故、出した指示と異なる動作をされたことに気がつかないことがある。ここで紹介する6つの自動変換をしっかり脳ミソにたたき込んでおけば、無用なトラブルにハマる時間も減るかもしれない。 1.[数値] 範囲外の数値は頭を押さえつけられる intやsmallint、bigintなどの数値型には、扱える範囲が決まっている。例えばint型なら最大21億ちょっとだ(unsignedの場合は43億弱)。これより大きい数字を登録するよう指示を出すとMySQLはどうするか。そう、頑張って入れられるところまで入れてくれるのである。「入れられるとこ
MySQL Casual Advent Calendar 2016 - Qiitaの6日目の記事です。 AdventCalendar自体初参加でドキドキ、してたら、成り行きで2日連続。 コレ用のきれいなエビデンス取れるような環境要していなかったので、普段より荒っぽいですが、Casualな感じで失礼します。 大きなテーブルを繰り返しSELECTしてたら、挙動が変わったんですよ。 バッファに載っているなら載っているで早いだろうし、載っていいなら最初ガッツリ遅くて、次からグイっと速くなるだろうと思っていたんですよ。 バッファに載りきらないなら、何回やっても遅いだろうと思っていたんですよ。 で、ちょいと計測的なことをやってた関係で、同じSQLを何度か叩いて平均、中央を見ようと思っていたんです。 そしたら、 45.71秒、44.90秒、24.44秒、13.32秒、13.12秒・・・ と、段階的に応答
MySQL 逆引きリファレンスについて 「MySQL 逆引きリファレンス」はオープンソースの RDBMS である MySQL のコマンドや TIPS などをリファレンス形式でまとめているサイトです。 MySQL 逆引き一覧 mysqlコマンド関連 コマンドラインから MySQL に接続する コマンドラインから MySQL 接続時に余計なメッセージを表示しない コマンドラインから MySQL 接続時にポート番号を指定する SQL 問い合わせ結果に列名を表示しないようにする SQL 問い合わせ結果を HTML 形式で表示する SQL 問い合わせ結果を XML 形式で表示する mysql コマンドのヘルプを表示する MySQL 接続時にバッチファイルを指定してバッチ処理を実行する MySQL 接続後にバッチファイルを指定してバッチ処理を実行する mysqladminコマンド関連 MySQL サー
今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造のスキーマを作りたいときの解決策のひとつとして閉包テーブルモデルを扱う。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ mysql --version mysql Ver 14.14 Distrib 5.7.12, for osx10.11 (x86_64) using EditLine wrapper 下準備 まずは下準備として MySQL にデータベースを作るところまで。 今回使ったのは Mac OS X なので MySQL は Homebrew でインストールする。 $ b
ふと@yoku0825に会いに関東の勉強会に行きたいなーと思ったけど俺が行くよりそもそも講師で呼んだ方が俺のスタイルな気がした。
こんにちは。今回のテーマは『Python3でMySQLに接続する環境をLinuxで整える』です。Python3でDjangoを使おうとしたらMySQLとの接続に手こずってしまいました。ネットで出てくる情報もPython2.x系の記事が多く、まだまだPython3.x系は普及している感じがないと思いながら記事を書きました。 [adsense02] MySQL for Pythonが使えない Python用のMySQLドライバといえばMySQL for python(mysql-python)が有名で、このドライバを使用している方も多いと思います。ネット上でもmysql-pythonを使用する例が多く出てくるのですが、これは2.x向けの記事であり、Python3では使うことができません。今回はPython3で使用可能なMySQLドライバmysqlclientとmysql-connector-p
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く