タグ

mysqlに関するlunasteraのブックマーク (11)

  • Bulk insertでも20時間以上かかっていたMySQLへのインサート処理を1時間以内にする - エムスリーテックブログ

    この記事はエムスリー Advent Calendar 2022の30日目の記事です。 前日は id:kijuky による チームメンバーのGoogleカレンダーの休暇予定一覧をスプレッドシート+GASで作った でした。 AI機械学習チームの北川(@kitagry)です。 今回はMySQLへのインサートを20倍以上高速化した話について書きます。 仕事をちゃんとしてるか見張る TL; DR はじめに 今回のテーブル バイナリログを無効化する 追試 LOAD DATA INFILE 追試 テーブルの正規化 インデックスを一時的に剥がす まとめ We are hiring!! TL; DR バイナリログをオフにする LOAD DATA INFILEを使う インデックスを一時的に消す はじめに AI機械学習チームではサイトトップからアプリに至るまで多くの推薦システムがあります。 そこでは推薦ロ

    Bulk insertでも20時間以上かかっていたMySQLへのインサート処理を1時間以内にする - エムスリーテックブログ
  • MySQLのmasterとslaveの手動切り替え - Qiita

    半年間、MySQLを基礎からやり直すことにしたので、その間に勉強したことをQiitaに投稿していきます。 設定自体は、前回の続きになるので下記のリンクを参考にして下さい CentOS6.5にMySQL5.5.38をインストールする手順 MySQLでレプリケーションを組んでみる スレーブ側の設定 レプリケーション用のユーザ作成 スレーブ側で実行する 許可するネットワーク:XXX.XXX.XXX.XXX ユーザ名:repli パスワード:repli # ユーザの作成 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repli'@'XXX.XXX.XXX.XXX' IDENTIFIED BY 'repli'; Query OK, 0 rows affected (0.00 # ユーザの確認 mysql> select user, host from mysql

    MySQLのmasterとslaveの手動切り替え - Qiita
  • MySQL/Postgres におけるトランザクション分離レベルと発生するアノマリーを整理する

    読者対象 ANSI 定義の古典的なトランザクション分離レベルとアノマリーは概ね理解している MySQL/Postgres では理論的な部分がどうなっているのかを知りたい 理論面の前提知識 2022-08-19 追記: 社内勉強会向けのスライドを作成しました。先にスライドを見てから,引用文献およびこの記事を読むと理解が深まると思います。 まず ANSI 定義の古典的な定義を聞いたことが無い方は,以下のリンクを参照されたい。 ANSI 定義に対応する解説はこれらのサイト以外にもたくさんあるため,自分にとって読みやすいと感じる情報をあたってほしい。(既に熟知されている方は十分) 次点で読んでいただきたいのが, @kumagi さんの以下の記事。古典的には 4 つの分離レベルと 3 つのアノマリーだけで説明されていたものの,不十分であることが学術的に指摘され,解像度を上げようとする流れが後になって

    MySQL/Postgres におけるトランザクション分離レベルと発生するアノマリーを整理する
  • MySQLでIN句の中に大量の値の入ったクエリがフルスキャンを起こす話 - freee Developers Hub

    こんにちは、freee Developers Advent Calendar 2021、19日目のid:shallow1729です。昨日はtdtdsさんで【マジで】サイバー演習シナリオの作り方【怖い】でした!障害訓練後に攻撃方法を解説された時はリアリティの高さに驚きました。 僕はMySQLを使っていて発生した不思議な挙動の調査の話をしようと思います。 今回問題となったクエリ 今回話題にするクエリは以下のようなシンプルなものです。 SELECT * FROM hoge WHERE id IN (...) MySQLのパラメーター次第ですが、デフォルトの設定だとこのIN句の中の値の数が数万になると適切なインデックスが用意されていてもフルスキャンが発生する事がありました。このクエリがテーブルのほとんどのレコードを網羅するような場合や高速でレコードを大量にinsertして統計情報が追いつかないケー

    MySQLでIN句の中に大量の値の入ったクエリがフルスキャンを起こす話 - freee Developers Hub
  • PlanetScaleというサーバレスDBが凄く勢いのあるサービスらしいのでQuick Startやってみた - Qiita

    PlanetScaleというサーバレスDBが凄く勢いのあるサービスと聞いて、公式にクイックスタートがあったのでやってみました。 環境 PC: MacBook Pro (Intel Core 2016) OS: macOS Montery12.2.1 では概要から確認していきます。 サーバーレスDBとは サーバがない、のではなく、サーバ管理や検討が不要 AWS Lambda(NoSQL)など PlanetScaleとは PlanetScale年表 2010年頃 YouTubeが急激に成長し、データベースが爆発しそうになっていたので、Sugu氏ともう一人のYouTubeのエンジニアがオープンソースプロジェクト「Vitess.io」(ヴィテス)を立ち上げる 2016年頃 MySQLでバイナリプロトコルを扱えるようにしたことで、VitessはYouTube以外の企業にとっても魅力的なシステムになり

    PlanetScaleというサーバレスDBが凄く勢いのあるサービスらしいのでQuick Startやってみた - Qiita
  • ASCやDESC修飾語はクエリのパフォーマンスに影響あり

    データベースは、どちらの方向に向かってもインデックスを読むことができます。つまり、パイプライン化されたorder byは、スキャンされるインデックスの範囲がorder by句と全く反対の時にも可能になるということです。order by句の ASCやDESC修飾語がパイプライン化された処理の 邪魔をしそうに思うかもしれませんが、多くのデータベースではインデックスの順序を変える方法を用意しており、パイプライン化されたorder byにインデックスを使えるようにできます。 次の例では、インデックスを逆順で使用し、日付の逆順および PRODUCT_IDの逆順に並べて、昨日までの売上を取り出します。 SELECT sale_date, product_id, quantity FROM sales WHERE sale_date >= TRUNC(sysdate) - INTERVAL '1' DA

    ASCやDESC修飾語はクエリのパフォーマンスに影響あり
  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 17.2.3 レプリケーションスレッド

    バイナリログダンプスレッド. ソースは、レプリカの接続時にバイナリログの内容をレプリカに送信するスレッドを作成します。 このスレッドは、ソース上の SHOW PROCESSLIST の出力で Binlog Dump スレッドとして識別できます。 バイナリログダンプスレッドは、レプリカに送信される各イベントを読み取るために、ソースバイナリログのロックを取得します。 イベントが読み取られるとすぐに、イベントがレプリカに送信される前でもロックが解除されます。 レプリケーション I/O スレッド. レプリカサーバーで START REPLICA | SLAVE ステートメントが発行されると、レプリカは I/O スレッドを作成します。このスレッドはソースに接続し、バイナリログに記録された更新を送信するように要求します。 レプリケーション I/O スレッドは、ソース Binlog Dump スレッドが

  • MySQLレプリケーション再入門 - Qiita

    はじめに 日々何となく使っているMySQLのレプリケーション機能ですが、レプリケーションの概念について、自分自身の再確認とこれから学ぶ方の少しでも参考になればと思い書くことにしました。 実際の設定などについては既にたくさんの良記事がありますので割愛します。 レプリケーションって何? 一言で 「データの複製を別のサーバーに持てる機能です。」 「複製」を直訳するとreplica(レプリカ)とかreplication(レプリケーション)になります。 これがMySQLにおいてデータの複製機能であるレプリケーションと呼ばれる所以です。 複製元となるサーバーを「マスター」(Master) 複製先となるサーバー「スレーブ」(Slave) と呼びます。 イメージ マスターで変更(INSERT,UPDATE,DELETEなど)があった場合に同じ情報をスレーブにも保持します。 マルチスレーブ構成 上記の例では

    MySQLレプリケーション再入門 - Qiita
  • ISUCON Cheat Sheet · GitHub

    00_timeline.md 集合 9:00にオフィス(Sticky Fingers) 料品は事前に用意しておく。べ過ぎない。胃に負担をかけないようにする。 運営の櫛井さんからのメールに従って、サポートチャットと予選ポータルサイトにログインする。 ISUCON6 予選レギュレーション メール: ISUCON6 オンライン予選 当日の流れについて 今までに寄せられた質問についてまとめたFAQ ISUCON6 予選 9月18日(日) 参加者サポート用チャット ISUCON6 予選ポータルサイト http://isucon6q.songmu.org/ 10:00〜11:00 最初の1時間 11:00〜12:00 まず基的なことをやる。 12:00〜17:00 この辺りからRedis移行に取り組む。 17:00〜18:00 最後の1時間 01_first_hour.md Why 課題の理解、

    ISUCON Cheat Sheet · GitHub
  • MySQL入門 レプリケーション編 - Qiita

    #経緯 とある勉強会の内容の復習&整理 #タイトル インストール・アーキテクチャ基礎編 レプリケーション編 ←今回はこちら バックアップ編 チューニング基礎編 #レプリケーション編 アジェンダ レプリケーションとは レプリケーションの仕組み レプリケーションの種類 レプリケーションの設定方法 バイナリログの管理方法 その他の考慮事項 参考情報 #1. レプリケーションとは ##1.1. 基礎知識 データの複製(レプリカ)を別のサーバにモテる機能 MySQLの標準機能で、多数のWebサイト等で利用されている - シンプルな設定で利用可能 - マスター → スレーブ構成 ##1.2. マスタースレーブ構成 サーバはマスター、スレーブまたは両方になれる マスターサーバ - データを変更 - 変更内容をスレーブに転送 - マスターは複数のスレーブを持てる スレーブサーバ - マスターでの変更内容を

    MySQL入門 レプリケーション編 - Qiita
  • 複合インデックスの正しい列の順序

    データベースは、プライマリキーに対して自動的にインデックスを作成しますが、キーが複数の列からなる時は、さらに手動で調整をする 余地があります。この場合、データベースはプライマリキーの全ての列にいわゆる 連結インデックス(あるいはマルチカラム インデックス、複合インデックス)を作成します。 複合インデックスの列の順番は、インデックスの使い勝手に大きな影響を及ぼすので、注意して決定する必要があります。 例として、企業が合併した場合を考えてみましょう。他の会社の社員が 加わったので、EMPLOYEESテーブルが10倍の大きさになったと しましょう。ここで問題が発生します。EMPLOYEE_IDが、 それぞれの会社で一意になっていなかったのです。子会社IDのような追加の識別子で、プライマリキーを拡張する必要があります。このため、プライマリ キーは、以前からのEMPLOYEE_IDに加えて、一意性を

    複合インデックスの正しい列の順序
  • 1