つらくないマルチテナンシーを求めて: 全て見せます! SmartHR データベース移行プロジェクトの裏側 / builderscon 2018
こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。先日親知らずを抜歯した時、つらすぎたので MySQL の JOIN のことを考えて心の平静を保っていました。 サイボウズの製品のひとつである kintone はニーズに応じて自由に業務アプリのようなものを手軽に作ることができ、データの検索条件やソート条件も細かくカスタマイズ可能で、様々なレベルでのアクセス権も設定可能という非常に便利なツールです。 しかしその機能を支える裏側では複雑なクエリが発行され、MySQL に多大な負荷をかけています。サイボウズのクラウドには数十テラバイトに登る MySQL データがあり、数千万件オーダーのテーブルを複数 JOIN するクエリが毎秒のように実行されるという、エンジニア魂が滾る環境です。 現在サイボウズでは性能改善に力を入れており、僕もその業務に従事しています。例えば2018年
MySQL を UTF-8 で使おうと思ってハマりがちなのは charset utf8 を指定してしまうことです。 MySQL の UTF-8 には歴史的事情により utf8 と utf8mb4 の二つあります。 UTF-8 は1バイト〜4バイトで1文字が構成される文字コードですが、MySQL の utf8 は4バイト文字を扱うことができません。ハマりたくなければ utf8mb4 を使いましょう。 utf8 を使ってしまった場合に4バイト文字がどのように扱われるか、自分でもうろ覚えだったのでメモしておきます。 登録 接続が utf8mb4 でカラムが utf8mb4 あたりまえですが、そのまま登録されます。 mysql> insert into utf8mb4 (c) values ('美味しい🍣と🍺'); mysql> select * from utf8mb4; +--------
こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、
以下に移行しました。 kenzo0107.github.io
最近、Elastic BeanstalkやECSと戦っているSREチームの菅原です。 P5をやりたいのにPS3もPS4も持っていないので指をくわえて羨ましがっている毎日です。 この記事では、突然のアクセス増に備えるために、MySQLのスレーブを1〜2時間でスケールアウトできるようにした話を書きます。 MySQL on EC2 クックパッドは周知の通りAWSを利用していますが、主要なデーターベースについてはAmazon RDSではなくMySQL on EC2を使っています。 これは以下のような理由によるものです。 歴史的な経緯: AWS移行当時、RDSが無かった。また、移行後もしばらくはTritonnを使っていたため、RDSを使うことができなかった オンラインメンテナンスの実現: VPCルートテーブルを使った仮想IPとMHA for MySQLを使ってダウンタイムゼロのマスタDBの切り替えを
先月、詳解MySQL 5.7を発刊したばかりであるが、MySQL 5.7自体は去年の10月にリリースされたバージョンである。それから約1年弱、MySQLは開発の手を緩めること無く日々改良を重ねている。 そう、MySQL 8.0の登場である。 現在はDevelopment Milestone Release(通称DMR)という状態なので、まだ正式版における機能が固まっている段階ではないという点には注意して欲しい。MySQLの開発プロセスでは、DMRをリリースするごとにその段階で成熟した機能をマージする。DMRを何度かリリースした後に、キリの良いところでリリース候補版となって正式版で追加される機能が一応確定し、その後バグ修正を経て正式版(GA版)がリリースされる予定となっている。詳しくはMySQLのマニュアルを参照して欲しい。 バージョン8.0!!5.7の次は誰もが5.8だと思っていただろう・
OSSデータベース取り取り時報 第13回MySQLグループレプリケーションのご紹介、PostgreSQLセキュリティ問題修正、PostgreSQL9.6Beta3, Beta4リリースのご紹介、Apache Cassandraバージョン3.8のリリース内容が確定 MySQLはグループレプリケーション機能のベータリリースやツール類のマイナーバージョンアップがありました。このグループレプリケーションのアーキテクチャを解説します。PostgreSQLは2点のセキュリティ問題の修正がありました。また、次期メジャーリリースの9.6に向けたBea3、Beta4がリリースされました。Apache Cassandraは遅れていたバージョン3.8のリリース内容が確定しました。 [MySQL]2016年8月の主な出来事 7月30日にMySQL 5.5、5.6、5.7のバグフィックスを中心としたマイナーバージョ
絵文字(UTF-8 の 4 byte 文字にあたる)を利用可能とするため、文字コードは utf8mb4 を利用する。 絵文字だけでなく非常用漢字なども対応するためには必要。 サーバ設定 とりあえず開発環境(Mac)は Homebrew でインストール brew install mysql (検証時点で 5.7.13)。 サーバの設定を以下のとおり変更する。 $ diff /etc/my.cnf.org /etc/my.cnf --- /etc/my.cnf.org 2016-07-05 18:46:02.000000000 +0900 +++ /etc/my.cnf 2016-07-15 14:43:47.000000000 +0900 @@ -16,7 +16,7 @@ # The following options will be passed to all MySQL clients
こんにちは、みんなのウェディングの小室 (id:hogelog) です。 今回はみんなのウェディングにおけるデータ分析基盤の現状についてご報告させていただきます。 三行まとめ 忙しい人のために先に結論を書くと bricolage と embulk で Redshift に集めて re:dash で分析 です。 データ収集 データ収集は bricolage のジョブネット機構を用いて bricolage の各種ジョブや embulk を連携させ、Redshift にデータを取り込んでいます。 参考までに https://github.com/hogelog/dwh-example に簡単な構成例を準備しました。 MySQL → Redshift みんなのウェディング http://www.mwed.jp/ のデータベースとしては MySQL を利用しています。 MySQL から Redshi
はじめに はじめまして、yoku0825といいます。とある企業のDBAです。 この連載を始めるにあたり、簡単に筆者の背景(この連載が、どんな仕事をしている人間によって書かれたか)を説明しておきたいと思います。 筆者は「とある企業でDBA(データベースを専門で面倒を見る人)」として雇用されています。「データベースの面倒を見る」というと、サーバーサイドアプリケーション(データベースの上のレイヤー)を書く人が担当している場合やインフラエンジニア(データベースよりも下のレイヤー)と呼ばれる人たちが担当している場合を多く耳にしますが、筆者はこれを専門的に、仕事をしている時間はほぼデータベースのことを考えていたり検証したりチューニングしたりしています。 このような背景から、筆者はたしなみ程度にしかプログラムが書けません。サーバーサイドアプリケーションはほぼブラックボックスです(見ようと思えば見られると
OSSデータベース取り取り時報 第6回MySQL 5.8の話題、PostgreSQL 9.5リリースとApache Cassandraのご紹介 MySQL関連では次のメジャー・バージョンや今後のロードマップに関連する話題が複数登場しました。PostgreSQLは2016年1月7日に新バージョンである9.5.0がリリースされました。今回はPostgreSQLの新バージョンに移行する際の注意点についてご紹介します。 また、今回からOSSコンソーシアム データベース部会よりApache Cassandraについてもご紹介します。 [MySQL]2016年1月の主な出来事 2015年10月に最新メジャー・バージョンMySQL 5.7がリリースされて以降も活発に開発と改良を続けています。MySQL 5.7のリリース後にコミュニティから寄せられたフィードバックを元に、複数の重要な修正を行っています。ま
2. Copyright © GREE, Inc. All Rights Reserved. 自己紹介 ● わりとMySQLのひと ● 3.23.58 から使ってる ● むかしは Resource Monitoring も力入れてやってた ● ganglia & rrdcached の(たぶん)ヘビーユーザ ● 5年くらい前から使い始めた ● gmond は素のまま使ってる ● gmetad は欲しい機能がなかったので patch 書いた ● webfrontend はほぼ書き直した ● あとはひたすら python module 書いた ● ganglia じゃなくても良かったんだけど、とにかく rrdcached を使いたかった ● というわけで、自分は Monitoring を大事にする ● 一時期は Flare という OSS の bugfix などもやってた 3. Copyrig
このエントリはMySQL Casual Advent Calendar 2015の10日目のエントリです。 先日のMySQL Casual Talks Vol8で@karupaneruraさんがパラメータの振り返りのような発表をされていたので、昨今あまり書かれなくなったMySQLに絡む設定パラメータについて書きます。それなりのメモリ(32GBとか)やSSDとか使ってる事を前提にしたような内容となります。 依存して変更した方が良いパラメータもあるので内容が前後に飛びますがご容赦下さい。またソースコードをがっつり読んだわけではなく、ベンチマーク中の挙動から推測している箇所が多分にあります。MyISAMのテーブルがサービス用データベースに同居する事を考慮していません。 結構突貫で書いているので後から微妙に修正する可能性があります。 InnoDBのパラメータ innodb_buffer_pool_
毎度おなじみMySQL CasualのAdvent Calendarが今年もやってまいりました。 Casualなので、難しいことを書く必要はありません。気軽に書いていきましょう。
このエントリはMySQL Casual Advent Calendar 2015の3日目です。 で、これです。 github.com ざっと調べた感じだと、openssl 1.0.1eあたりからDiffie-Hellman (DH) key length 1024bit以上を要求するようになったかなんかで、MySQLが512bitとかいうかなり短いkey lengthを使ってるせいでopensslに怒られる感じらしい。 MySQL 5.7からデフォルトsslオプションが有効なのでRDSとかみたいなSSL接続受け付けてるホストに5.7のクライアントでそらで接続しようとするとコケるっぽい。 $ mysql --help ... --ssl If set to ON, this option enforces that SSL is established before client attem
こんにちは! CTOの島田(@tatsushim)です。前回の私の記事ではインフラ構成について触れました。 インフラを構築したらその運用が必要になりますね。今回は社内で行っているDBのスロークエリ解析について紹介したいと思います。 時間がない人向けに要点を3つにまとめると ママリでは定期的にクエリの見直し時間をとっている その理由は、レスポンスタイムがユーザーの滞在時間に大きく影響するため pt-query-digestを使うとカジュアルにクエリログを解析できるから初心者にもオススメ という感じです。それぞれについて解説していきます。 定期的にクエリの見直しをする 現在ママリでは、定期的にクエリの見直しをする時間を開発スケジュールに入れています。 それは、レスポンスタイムがユーザーの滞在時間に大きく影響するためです。 ORマッパーでコードを書いていると気づかないうちにスロークエリを発行して
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く