タグ

MySQLに関するyouheyのブックマーク (100)

  • MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。

    ゴールデンウィークはいかがお過ごしされただろうか。今年は天気も良く、行楽日和が続いたように思う。 さて、先日MySQL 8.0が正式にリリースされた。少し時間が経ってしまったが、今回はMySQL 8.0の新機能について紹介したい。コミュニティ版のダウンロードはこちらから可能だ。 ひとつ前の正式バージョンはMySQL 5.7だったのだが、MySQL 8.0は非常に大きなリファクタリングが含まれており、5.x台のバージョン番号を捨て去ろうという話があった。そこで、次のメジャーバージョンは最初の桁を増やすということになったのだが、MySQL 6.0は過去に既に存在し、買収などの騒ぎで開発が頓挫してしまった経緯がある。7.xはMySQL NDB Clusterと被っている。というわけで、5.7の7の部分の次という意味合いもあって、8.0というバージョン番号を引っさげ、満を持しての登場となった。その

    MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。
    youhey
    youhey 2018/05/07
    けっこうやまもり
  • MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記

    MySQLのデータ型としてFLOAT型という型があるのですが、これを採用するのは混乱の元ではないか?と感じたので、その詳細を紹介します。 そもそもこの話のきっかけは「MySQLで6桁までの小数点を丸めずに扱うならFLOAT型を使うべき理由」という記事が目に止まったことです。それなりに人気を集めている記事のようですが、私の読んだ限りではFLOAT型を使うだけの根拠が文中から読み取れず、さらに類似する一次情報や英語記事が全く見つからなかったので、真偽が怪しい情報だと感じました。 その後、MySQL上で実験したりCソースコードを読んでみたりした結果、私の得た結論は真逆のものになりました。MySQL警察の方や浮動小数点数警察の方、追試や反論など頂けると助かります。 MySQLのFLOAT型とは MySQLのFLOAT型は原則としてIEEE754浮動小数点数単精度型(32bit)で実現されます*1。

    MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記
    youhey
    youhey 2017/12/25
  • Goで作るDBレプリケーションツール

    gopli - DB replication tool to synchronize data with multi environments written in Golang. ツールの名前はgopli (go replication)で、意図どおりの名前ですね。 これは何tomlで書いた、ssh/db接続用の設定ファイルを元に、特定の環境間でデータを同期させるツールです。今の所MySQLのみ対応で、postgresqlに対応しろと言われたものの、なかなか手が回っていない状況です。 使い方は簡単で、 まず以下のように、 sshでのサーバーへの接続と、MySQLへの接続設定をtomlで書きます。 [database] [database.local] host = "localhost" management_system = "mysql" name = "app_developmen

    youhey
    youhey 2016/12/27
  • MySQL ibdata1が肥大化する理由(記事の意訳) | Ore no homepage

    毎日暑い…。というか蒸し暑い。何年か前にベトナムとカンボジアをバックパッカー旅行したときを思い出す。日の気候が亜熱帯ってか東南アジアっぽくなってきたような…昔はこんな頻繁にゲラリ豪雨とか降らなかったよねー?温暖化ってやつ?日の植生とか変わるんじゃねーのかな…。 えーと、おれがよく見ている技術ブログの一つにPercona社のMySQL Performance Blogがある。そのブログに先日、「Why is the ibdata1 file continuously growing in MySQL?」という記事が投稿された。内容はInnoDBのibdata1の肥大化とその解消方法に関するもの。ibdata1の肥大化を解消する手段は、ダンプをとってDBを作り直してあげないと治らないということは多くのInnoDBユーザが知っていることだと思うけど、おれもInnoDBを触り始めたころは、「気

  • innodb_file_per_tableが有効な時にディスク容量を開放するには | Yakst

    MySQL Performance Blogの翻訳。innodb_file_per_tableが有効になっている時、データを削除してもデータファイルのサイズは小さくならない。これを小さくする方法とは。 September 25, 2013 By Nilnandan Joshi innodb_file_per_tableがOFFの時には、全てのデータはibdataファイルに保存される。テーブルをドロップしたりデータを消したりしたとき、使用されていないディスク領域を解放するには、ダンプしてからリストアするしかない。 innodb_file_per_tableがONの時には、各テーブルのデータとインデックスはそれぞれの表領域ファイルに保存される。しかし、共有の表領域であるibdata1も容量が増えてしまう。これがなぜ起きて、どうやって解決するかはこちらの記事(日語訳)を見て欲しい。 上に挙げた

    innodb_file_per_tableが有効な時にディスク容量を開放するには | Yakst
  • 大人のためのInnoDBテーブルとの正しい付き合い方。

    InnoDB関連でよくある質問のひとつに「テーブルのメンテナンスは何をすればいいんですか?」というものがある。InnoDBMySQL 5.5でデフォルトストレージエンジンとなるため、InnoDBのテーブルメンテナンス計画を立ようと思う機会も増えることだろう。そこで、今日はInnoDBのテーブルメンテナンスの各種方法となぜそうしなければいけないかという理由を解説しようと思う。 ANALYZE TABLEテーブルメンテナンスの代名詞といえば、インデックス統計情報の更新ではなかろうか。運用を続けるうちに、知らず知らずインデックス統計情報が狂ってしまい、思うような性能が出ない。RDBMSにはそのような問題がつきものであるが、InnoDBの場合、ANALYZE TABLEは不要である。なぜなら、InnoDBが自発的に統計情報を更新するからだ。InnoDBは以下の条件に適合すると、ANALYZE T

    大人のためのInnoDBテーブルとの正しい付き合い方。
  • MySQL 5.7の罠があなたを狙っている

    2015/08/22 YAPC::Asia Tokyo 2015 Lightning Talk 2016/01/13 update about default_password_lifetime will be 0Read less

    MySQL 5.7の罠があなたを狙っている
  • なかったらINSERTしたいし、あるならロック取りたいやん?

    Database Lounge Tokyo #4 https://database-lounge-tokyo.connpass.com/event/54855/ で話した資料。 動画はこっち https://www.youtube.com/watch?time_continue=1&v=VTEAJHJHIpY

    なかったらINSERTしたいし、あるならロック取りたいやん?
    youhey
    youhey 2016/01/21
    とてもバッドノウハウだと思いますが、これで迂闊にデッドロック祭りしたので勉強になります
  • RDB - 実例で学ぶ、JOIN (NLJ) が遅くなる理屈と対処法 - Qiita

    "Nested Loop Joinしか取り上げて無いのにタイトルが大きすぎないか" と指摘を頂いたので、タイトルを修正しました。Merge JoinとHash Joinのことはまた今度書こうと思います。 「JOINは遅い」とよく言われます。特にRDBを使い始めて間がない内にそういう言説に触れた結果「JOIN=悪」という認識で固定化されてしまっている人も多いように感じています。 たしかに、JOINを含むようなSELECT文は、含まないものに比べて重たくなる傾向があることは事実です。また、質的に問い合わせたい内容が複雑で、対処することが難しいものも存在します。しかし、RDBの中で一体どういうことが起きているのかを知り、それに基いて対処すれば高速化できることも少なくないと考えています。 稿では、JOINの内部動作を解説した上で、Webサービスを作っているとよく出てくるJOIN SQLを例題に

    RDB - 実例で学ぶ、JOIN (NLJ) が遅くなる理屈と対処法 - Qiita
  • MySQLテーブル設計入門

    行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada

    MySQLテーブル設計入門
    youhey
    youhey 2015/05/01
  • MySQL と Unicode Collation Algorithm (UCA) - かみぽわーる

    utf8_unicode_ci に対する日の開発者の見解 - かみぽわーる で、日語が分かる人には utf8_unicode_ci のヤバさを感じてもらえたと思うんですけど、この挙動はドキュメントによると UCA というアルゴリズムによるものらしい。 MySQL implements the xxx_unicode_ci collations according to the Unicode Collation Algorithm (UCA) described at http://www.unicode.org/reports/tr10/. The collation uses the version-4.0.0 UCA weight keys: http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt. Currently,

    MySQL と Unicode Collation Algorithm (UCA) - かみぽわーる
    youhey
    youhey 2015/03/23
  • utf8_unicode_ci に対する日本の開発者の見解 - かみぽわーる

    RailsMySQLのcollationをサーバー側のデフォルトのutf8_general_ciからutf8_unicode_ciにわざわざ変えてるのどうせ大した理由じゃないだろと思って掘ってみたらやっぱり大した理由じゃなかった… https://t.co/6NeetGhTF0— Ryuta Kamizono (@kamipo) April 18, 2014 Railsでcollationとしてutf8_unicode_ci(RailsのDEFAULT_COLLATION)が採用されるのはcharsetが未指定もしくはutf8(RailsのDEFAULT_CHARSET)のときだけで、utf8mb4にすることとかは全く考慮されてない。— Ryuta Kamizono (@kamipo) April 19, 2014 @frsyuki MySQLのcharset utf8のときのデフォルト

    utf8_unicode_ci に対する日本の開発者の見解 - かみぽわーる
  • MySQL 5.5.11 unicode_ci で同一視される文字

    MySQL 5.5.11 unicode_ci で同一視される文字 Unicode 002000A02000200120022003200420052006200720082009200A202F205F3000 Character Unicode 0021FE57FF01 Character !﹗! Unicode 0022FF02 Character "" Unicode 0023FE5FFF03 Character #﹟# Unicode 0024FE69FF04 Character $﹩$ Unicode 0025FE6AFF05 Character %﹪% Unicode 0026FE60FF06 Character &﹠& Unicode 0027FF07 Character '' Unicode 0028207D208DFE35FE59FF08 Character (⁽₍︵﹙

  • MySQLのクエリキャッシュ - fixers's diary

    2013-01-04 MySQLのクエリキャッシュ MySQLのクエリキャッシュは、クエリとクエリの結果を保持しておくキャッシュで 全く同じクエリが発行された場合はクエリキャッシュを取り出すので有効。 更新が多い場合はクリアされてしまうので、更新系が多いゲーム系のWebサービスでは 不向きとされている。(オーバーヘッドが増えるため) 逆に全く同じクエリが大量に発行される場合はかなり有効となる。ただし全く同じクエリが 大量に発行される場合はそもそもmemcache化されたりしている気もするが。。。以前はquery_cacheを入れると効果的な場合が多かったが、現状のWebサービスでは 切ったほうが性能がいいという記事の方が多い。 ただ、きちんと設計されている場合は更新が多い今時のサービスは切ったほうがいいのだろうが 意外とうまくmemcache化ができていない箇所があったりし

    youhey
    youhey 2014/12/09
  • MySQLバージョンアップのベストプラクティス | Yakst

    MySQL Performance Blogの翻訳。Perconaのサポートエンジニアによる、MySQLバージョンアップの様々なパターンと、その利点・欠点、手順の解説。バージョンアップ実施前の、事前調査とテストが重要であるとの指摘も。 MySQLのバージョンアップ(訳注 : 原文ではupgrade、以下同じ)はどこかで必要になるタスクだし、我々Percona SupportでもMySQLバージョンアップのベストプラクティスについての色々な質問を受け付けている。この記事では、色々なシナリオにおけるMySQLバージョンアップの推奨できる方法に焦点を当ててみたい。 MySQLのバージョンアップはなぜ必要になってしまうのか?その理由は色々だが、新機能が必要、パフォーマンスの改善、バグ修正などがあるだろう。しかし、アプリケーションと組み合わせた上で事前に広範囲なテストをしておかないと、リスクの大きい

    MySQLバージョンアップのベストプラクティス | Yakst
    youhey
    youhey 2014/10/20
  • MySQL 5.6 でのレプリケーション遅延は危険 : DSAS開発者の部屋

    MySQL 5.6 の検証中に MySQL 5.5 とは違うタイプのレプリケーション遅延を見つけたので紹介します。 MySQL のレプリケーションのおさらい MySQL のレプリケーションは次のような仕組みで動作しています。 マスターの更新トランザクションが binlog を書く スレーブの I/O スレッドがマスターに接続し、 binlog を取得し、 relaylog を書く. マスター側はスレーブからの接続を受け付けると(dump スレッド)、指定された場所から最新までの binlog を転送する binlog が追記されるのを待ってさらにスレーブに送る スレーブのSQLスレッドが relaylog を再生する MySQL 5.5 でよくあったレプリケーション遅延 マスターは並列してトランザクションを処理して、最終的にコミットした順で反映されれば問題ないようになっています。 一方、ス

    MySQL 5.6 でのレプリケーション遅延は危険 : DSAS開発者の部屋
    youhey
    youhey 2014/07/23
  • MySQLをプロファイる(仮)

    mysqlbinlogが残る問題、バグっていたのはyoku0825の脳髄でした。 "modified version 2"で追記してあります。

    MySQLをプロファイる(仮)
    youhey
    youhey 2014/04/17
  • MySQLで処理に長時間かかっている複数クエリをまとめて殺す方法 | Basicinc Enjoy Hacking!

    あまりにも処理に時間がかかるようなSQLを実行してしまい、MySQLがうんともすんとも言わなくなってしまうような状況、よくありますよね。っていうか、まぁそんな状況あってはならないんですが、時たまあります。そんな時、問題となっているクエリの処理を止めたいわけです。 特定のクエリを止める方法 MySQLで実行中のクエリ一覧を見て、SQLを強制終了する方法 こちらを見てもらえればやり方は分かります。単純にMySQLに入って、show processlist;で問題のあるクエリを発見し、プロセスIDを kill するだけ。とても簡単。 複数のクエリを一括で止める方法 今回は問題のあるクエリが100個あったらどうする…?的なのを解決するエントリーです。まぁ、問題あるクエリ100個ある状況は、アプリ的に問題あるんじゃね?っていうレベルですが。 1個ずつプロセスIDをコピペして…なんてやってられないです

    MySQLで処理に長時間かかっている複数クエリをまとめて殺す方法 | Basicinc Enjoy Hacking!
    youhey
    youhey 2014/04/16
    SELECT * FROM information_schema.PROCESSLIST;
  • Insert ignore into、Select For Update と シュレディンガーの猫 - maedamaのブログ

    Repeatable Read と シュレディンガーの Repeatable Read のポリシーはシュレディンガーのと似ていると思う。つまり、状態が観測されたらそのTransactionで、それは決定事項になるという事である。 シュレディンガーの http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A5%E3%83%AC%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E3%81%AE%E7%8C%AB シュレディンガーの的には以下である。 箱の中身を観測するまではが生きているかいきていないかは決定してなく、どちらの状態もとりうる 箱の中身を観測した時点において、がいきている状態なのか死んでいる状態なのか確定する これを Repeatable Read におきかえると以下のように

    Insert ignore into、Select For Update と シュレディンガーの猫 - maedamaのブログ
    youhey
    youhey 2014/02/19
  • mysql で duplicate な error を防ぐために insert ignore はしないほうがいいのかなぁと思った - soh335 memo

    insert した際に unique key とか primary key で duplicate な場合に error が起きるのを防ぐために(無視して良いとうい仕様の場合に) insert ignore ... すると良いみたいな記事があったりするけれども、実際どうなのかなぁと思って調べた。 If you use the IGNORE keyword, errors that occur while executing the INSERT statement are ignored. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the state

    mysql で duplicate な error を防ぐために insert ignore はしないほうがいいのかなぁと思った - soh335 memo
    youhey
    youhey 2014/01/16