2022年7月13日にカラーミーショップで提供開始した「副管理者機能」のアップデートにあたって、従前の挙動を変えずにデータベーススキーマの構造を変える必要がありました。また、サービスの提供を停止することなく、スキーマの構造の変更を進める必要がありました。 この記事では、サービスを停止せずにデータベースの構造を徐々に変更するデータベースリファクタリングをどのように進めたかについて紹介します。 「データベースリファクタリング」とは データベースリファクタリングについて体系的に述べた書籍として"RefactoringDatabases"があります。この本では、データベースリファクタリングのさまざまなパターンにおいて、スキーマの変更、データマイグレーション(既存データの移行)、アプリケーションの変更それぞれをどのように進めるべきかについて解説しています。ここでは、"Refactoring Dat
G-genの杉村です。Google Cloud(旧称GCP)のフルマネージドのデータウェアハウスである BigQuery には、パフォーマンスの向上に当たり パーティション と クラスタリング という重要な概念があります。それぞれの仕組みや使い分けを解説していきます。 パーティション パーティションとは パーティションフィルタ要件 (Partition filter requirements) メリット パーティションの分割基準 時間の列 取り込み時間 整数範囲の列 パーティションの管理 クラスタリング クラスタリングとは クラスタ化に指定する列 自動再クラスタリング パーティション VS クラスタリング パーティションとクラスタリングの違い パーティションとクラスタリングの使い分け パーティション・クラスターのレコメンデーション その他 注意点 参考情報 パーティション パーティション
こんにちは、freee Developers Advent Calendar 2021、19日目のid:shallow1729です。昨日はtdtdsさんで【マジで】サイバー演習シナリオの作り方【怖い】でした!障害訓練後に攻撃方法を解説された時はリアリティの高さに驚きました。 僕はMySQLを使っていて発生した不思議な挙動の調査の話をしようと思います。 今回問題となったクエリ 今回話題にするクエリは以下のようなシンプルなものです。 SELECT * FROM hoge WHERE id IN (...)MySQLのパラメーター次第ですが、デフォルトの設定だとこのIN句の中の値の数が数万になると適切なインデックスが用意されていてもフルスキャンが発生する事がありました。このクエリがテーブルのほとんどのレコードを網羅するような場合や高速でレコードを大量にinsertして統計情報が追いつかないケー
データをパーティションすることで、各クエリによってスキャンされるデータの量を制限できるようになるため、パフォーマンスが向上し、コストが削減されます。任意のキーでデータをパーティションに分割することができます。一般的な方法では、時間に基づいてデータをパーティションします。これにより、通常、複数レベルのパーティション構成となります。たとえば、1 時間ごとに配信されるデータを年、月、日、時間でパーティションできます。別の例として、データが配信されるソースが多数に分かれているものの、それらのロードは 1 日 1 回だけ行われる場合には、データソースと日付によるパーティションを行います。 Athena では Apache Hive スタイルのパーティションを使用できます。このパーティションのデータパスには、等号で連結されたキーと値のペア (例えば country=us/... または year=20
IntroducingSqlcommenter: An open sourceORM auto-instrumentation library Object-relationalmapping (ORM) helps developers to write queries using an object-oriented paradigm, which integrates naturally with application code in their preferredprogramming language. Many full-stack developers rely onORM tools to writedatabase code in their applications, but since theSQL statements are generated b
はじめにTwitterのタイムラインを見ていたらバッチ系のプログラムで逐次コミットをやめて一括コミットにしたら爆速になったというのを見ました。当たり前でしょ、と思ったけど確かに知らなければ分からないよね、と思って主に初心者向けにRDBを扱うときの注意点をまとめてみました。 プログラミングテクニック的なところからテーブル設計くらいの範疇でDBチューニングとかは入ってないです。 自分の経験的にOracleをベースに書いていますが、他のRDBでも特に変わらないレベルの粒度だと思います。 大量の逐次コミットをする バッチアプリケーションでDBにデータをインサートすると言うのはかなり一般的な処理です。しかしデータ量が少ない時はともかく大量のインサートを逐次コミットで処理するとめちゃくちゃ遅くなります。数倍から十数倍遅くなることもあるので、10分程度のバッチが1時間越えに化けることもザラにあるので原
RDBMSのテーブルにINDEX(セカンダリINDEX)を作成する場合、よく「カーディナリティが低いカラムには作るな」と言われます。 どんな場合でも当てはまるのか、少し実験して確かめてみます。 カーディナリティとは 今さら解説するまでもないかもしれませんが、「あるカラムにおける、取りうる値の種類」のことです。 ER図など、DBに絡む場面で別の意味で使われることもありますが、ここではこの意味で使います。 例えば、性別を表すカラムがあり、必須で値を入れなければならない場合は、「男性」「女性」の2種類、です。 「カーディナリティが低いカラムにINDEXを張るな」の意味 先に挙げた「性別」の場合、もし対象となる全レコードで男女の比率がほぼ1:1であれば、INDEXで絞り込める範囲は1/2程度です。絞り込みの効果があまりありません。 このような場合は、わざわざセカンダリINDEXを使うのではなく、テ
初めに こんにちは。ビジネスチャットサービスTypetalkを開発・運用している吉田です。Typetalkではデータの永続化ストレージとしてPostgreSQLを利用しています。扱うデータ量は多く、チャットというサービスの性質上書込み頻度はとても高いです。PostgreSQLを使い日々開発を進めていると、追加する機能によってはスキーマを変更する必要があります。メンテナンスを計画・告知してサービスを止めてしまえば、時間はかかるかもしれませんがスキーマの変更はそう難しくありません。しかしTypetalkはユーザーが日々の業務を進めるために利用しており、サービスが止まるとコミュニケーションが取れなくなります。業務を円滑に進めるためのビジネスチャットツールですので、極力サービスは止めたくありません(最後の計画メンテナンスは2019年6月30日で1年以上前となっています。)。本記事では以下の3つのケ
Amazon Web Services ブログAmazon Athena のパフォーマンスチューニング Tips トップ 10 2024 年 2 月に更新された原文を日本語版として 9 月に反映しました: この記事は、コストベースの最適化とクエリ結果の再利用を含むAmazon Athena エンジンバージョン 3 の変更を反映するために確認および更新されました。Amazon Athena は、オープンソースのフレームワークに基づいた対話型分析サービスで、標準のSQL を使ってAmazonSimple Storage Service (Amazon S3) に格納されたオープンテーブルおよびファイル形式のデータを簡単に分析できます。Athena はサーバーレスなので、インフラストラクチャの管理は不要で、実行したクエリに対してのみ料金を支払います。Athena は使いやすく、Ama
order byにインデックスが効かないケースの前に・・・order byにインデックスが使用されるのは、どんな時? 単独でインデックスが張られているカラムをorder byに指定したとき。 Where節内で使用したカラムとorder byで指定したカラムと合わせて複合インデックスが張られているとき(ただし、Where内では定数が指定されていること) この通りに指定してもインデックスが効かないケースがあります。 それが下記です。 ※ key1はkey_part11で構成されるインデックス、key2はkey_part21とkey_part22で構成されるインデックスとしています。 order by句に複数のインデックスを使用する SELECT * FROM t1 ORDER BY key_part11, key_part21, key_part22; この例では2つ以上のインデックスをord
Databases are global, shared, mutable state. That's the wayit has been since the 1960s, and no amount of NoSQL has changed that. However, most self-respecting developers havegot rid of mutable global variables in their code long ago. So why do we toleratedatabases as they are? A more promising model, used in some systems, is to think of adatabase as an always-growing collection of immutable f
MySQL(RDBMS)でビッグデータを扱う ビッグデータというのは、概ね通常単一のPCでは扱いきれないデータ量のレコード数のデータのことを言います。 一般的にはDBなどに蓄積されているデータよりも蓄積はされても参照されることのないログファイルを指してビッグデータと呼ばれるようですが、通常参照されることのないデータをわざわざ検索することにそれほど価値や意味を見出すことには疑問が残ります。 また、ログファイルといえどもそうそう1億行にも達するようなデータというものはwebサービスを運営していたとしても早々お目にかかれるものでもありません。 なので、「ワイもビッグデータを扱ってみたい!」とふと思った少年少女そのほかおじさんなどに向けた「手軽に作れるビッグデータ」の方法を記述していこうかと思います。本記事を試行するにあたって必要なシステム本記事ではMySQL5.5を利用していますが、5.1以
こんにちは、ミドルウェア開発チームの青木(@a_o_k_i_n_g)です。 今回は、サイボウズ製品のひとつであるkintone に対して行った性能改善の成果を紹介したいと思います。kintone は面倒なコーディング無しに業務アプリケーションのようなものを作ることができ、様々なデータを格納したり、複雑な条件で検索したりソートしたり、アクセス権もきめ細やかに設定したりできるというサービスです。このkintone はサービスの性質上、多種多様で複雑なクエリを発行します。またデータ量も膨大でMySQL だけで計数十テラバイトのデータが存在しており、クエリの処理時間が長時間かかってしまうこともあります。 サイボウズではkintone の性能改善に力を入れており、今回はその成果を紹介しようと思います。 はじめにkintone はテナントごとに大きく使い方が異なり、性能改善が効くケースもあれ
こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。先日親知らずを抜歯した時、つらすぎたのでMySQL のJOIN のことを考えて心の平静を保っていました。 サイボウズの製品のひとつであるkintone はニーズに応じて自由に業務アプリのようなものを手軽に作ることができ、データの検索条件やソート条件も細かくカスタマイズ可能で、様々なレベルでのアクセス権も設定可能という非常に便利なツールです。 しかしその機能を支える裏側では複雑なクエリが発行され、MySQL に多大な負荷をかけています。サイボウズのクラウドには数十テラバイトに登るMySQL データがあり、数千万件オーダーのテーブルを複数JOIN するクエリが毎秒のように実行されるという、エンジニア魂が滾る環境です。 現在サイボウズでは性能改善に力を入れており、僕もその業務に従事しています。例えば2018年
OpenStackは以下を参考にインストール。 http://docs.openstack.org/grizzly/basic-install/apt/content/ インストールバージョンはgrizzly。 OSはUbuntu12.04。 コントローラノード1台、ネットワークノード1台、コンピュータノード2台の構成。 で、インストール後管理画面を開くと異様に遅いOpenStackが。 とりあえずvmstatで状況を確認。 hoge@fuga:~$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 1 34888 73116 35168 881976 0
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く