sql server運用実践 - 3年間80台の運用経験から20の教訓

26
db tech showcase Tokyo 2014 株式会社gloops システム統括部 情報システムG Microsoft MVP for Windows Azure 大和屋貴仁 SQL Server 運用実践 3年間80台の運用経験から20の教訓

Upload: -

Post on 28-Jun-2015

4.422 views

Category:

Technology


4 download

DESCRIPTION

db tech showcase tokyo 2014の資料。 株式会社gloopsで、3年間80台の運用経験から得た20の教訓をご紹介します。

TRANSCRIPT

Page 1: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

db tech showcase Tokyo 2014

株式会社gloopsシステム統括部情報システムG

Microsoft MVP for Windows Azure

大和屋貴仁

SQL Server運用実践3年間80台の運用経験から20の教訓

Page 2: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

株式会社gloops (グループス)

Windows Server / IIS / SQL Server

Redis / memcached /Nginx / icinga / fluentd / kibana / ElasticSearch

ソーシャルゲームの開発・運用をするエンターテイメント会社

Windows Server と Linuxのハイブリッドインフラ

データベースに SQL Serverを採用

Page 3: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

gloops のデータベース・サーバー

5万人の同時接続ユーザーがリアルタイムバトルで

遊んで連打する

秒間 5万クエリ

一日 200GB の更新量24時間で出力される

トランザクションログバックアップの総合計量

Page 4: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

gloops のデータベース・サーバー

gloops で運用しているデータベース・サーバーの台数

クローズしたコンテンツや故障交換も含めると150台

80台のSQL Server

NAND型フラッシュメモリベースの高速なストレージを

2011年から採用し続けている

Fusion-ioDrive2

Page 5: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

大和屋貴仁

システムインテグレーターで5年間のデータベースSE

gloopsで3年間のデータベースアドミニストレーター

8年間の SQL Server 経験

2011年から4年間、マイクロソフトからMVPアワードを受賞

SQL Azureの分野で2年、Windwos Azureの分野で2年

Microsoft MVP

Page 6: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

BIOS を適正にバージョンアップする

BIOSのバグによりメモリ破損が発生する

メモリ破損の影響を受け、論理データ不整合が発生する

論理データ不整合が発生していてもDBは動作し続ける

不整合が発生している箇所を読み取った時のみエラーが発生する

それ以外は意外とまっとうに動作する

インデックスの再構築がトリガーとなりデータベースが

起動しなく大規模障害発生

現在使用しているBIOSのバージョンが最新か確認する。

最新じゃない場合は、最新のバージョンで何が修正されているかを把握する

1

Page 7: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

sqldumpが出力されていないか確認する

SQL Server は致命的なエラーが発生した場合、

SQLDump****という名前のダンプファイルを

SQL Server ログ配下に出力する

同フォルダーにexception.logも出力する

これらのファイルが生成されている場合、

最悪の場合論理不整合などが発生している可能性がある

データベースが起動しなくなる大規模障害の

可能性があるので出力されていないかを監視する

2

Page 8: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

SQL Server を適正にバージョンアップする

SQL Server は、SPとCUをリリースしている

SPとCUで修正されているバグを確認し、

自社で使用する際に問題となるものが

含まれていないか確認する

gloopsでは、3 つのバグに立て続けに遭遇した

SP1は、SQL Server サービスが予期なく停止する

SP1 CU4は、コネクションプーリングがらみの問題

SP1 CU6は、NW接続が不安定になる(trans-port level error)

3

Page 9: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

SQL Server の問い合わせ窓口を確保する

有償製品を使う最大のメリットは開発元のサポートを

受けられること

致命的なバグがあった場合に問い合わせ、解決することが可能

問い合わせをするためには、問い合わせ窓口の確保が必要

サポート形態はいくつかあるが、ProfessionalかPremiumを

確保する

Premiumはハードルが高いが、Professionalは利用ハードルが低い

ボリュームライセンス契約などでSA契約を締結していれば、

SA契約の特典でProfessionalサポートを受けられる

4

Page 10: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

必要なライセンス契約を確認する

サービスを展開する前に、マイクロソフトに

ライセンス契約を確認する

ライセンスについてはマイクロソフトのライセンス部門の判断が

全てに勝る

SPLA契約・SA契約の必要有無が意外と焦点となる

ソーシャルゲームは、SPLA契約もしくはSA契約が必要となる

AWSやAzureを使用する場合には、SPLA契約下で提供されているので

気にしなくても良いことが多い

プロセッサーライセンスかCALライセンスかを吟味する

一般公開するWebサービスは、ほぼ間違いなくプロセッサーライセンスを

使用したほうが有利

5

Page 11: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

冗長化ライセンス確保のためSA契約を締結する

1つまでは冗長化環境のライセンスは不要だった

冗長環境1個まではライセンスに含まれていたので

追加ライセンスが不要だった

SQL Server 2014のリリースに伴い製品使用権、

使用許諾で許諾されていた

「フェールオーバーに関する権利」がSA特典に

変更になった(2014/4/1以降)

ログ配布、AlwaysOnなどの環境構築時に

フェールオーバー環境用のライセンスか、SA契約が必要になった

6

Page 12: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

NICはケチらず信頼性の高いメーカーを選ぶ

高トラフィック環境下では、相性や品質による

原因特定しにくいパケット再送が

多発することがある

あるメーカーのNICを使用していた時に、パケットの

再送が異常な値を示していた

NWが寸断してアプリケーションエラーが発生する原因となっていた

NICのメーカーを変更し、DBのNICを入れ替えたところ、

アプリケーションエラーの減少とパケット再送が正常な範囲に

収まるようになった

7

Page 13: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

データベースの容量拡張は手動で実施する

更新量が多いデータベースを運用していると初期設定

したデータベース容量を超えてることがある

自動拡張した場合、予期しないタイミングでロックされることがある

拡張サイズはパーセンテージの指定からMB指定に変更する

自動拡張は転ばぬ先の杖とし、手動で更新する

データファイルを複数に分けている場合、自動拡張されるのは、

その内の1つのみ

空き状況に応じて振り分けられるので、自動拡張してしまうと

データ処理が特定データファイルに偏ってしまう

手動で全てのデータファイルの容量を均等に増やす

8

Page 14: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

トランザクションログの容量を意識する

バッチ処理などで大量にデータを更新したり、

削除する場合には、トランザクションログバックアップの頻度を

意識する

大量処理を並列に動かしたりすると、トランザクションログの

初期容量を超えて自動拡張を大量に引き起こす可能性がある

バッチ処理(コミット粒度)が大きい場合、その処理が完了するまで、

以後にコミットされたログも開放されないので必要なトランザクションログ

容量が想像以上に多くなる

トランザクションログバックアップ頻度に沿ったバッチ処理計画を組む

トランザクションログバックアップ頻度が5分なら、5分間に収まるような

コミット粒度にできないか検討する

9

Page 15: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

バックアップ容量と期間の計算を慎重にする

完全バックアップモードで運用している場合、

指定日時にリストアすることができるが、

ファイルが不足しているとリストアできない

完全バックアップからリストアしたい日時までの

トランザクションログバックアップファイルが揃っている必要がある

バッチ処理などでトランザクションログを定期削除する際に誤って消しすぎた

前日分を消す際に、単純に24時間分消したら、完全バックアップは

1日に1回だったので、一部トランザクションログファイルが不足した

具体的なシミュレート計算をして、いつでも(例えば、日をまたいだり、バッチ処理をした直後etc)でも確実にリストアできるか確認する

10

Page 16: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

バックアップにかかる時間と容量を考慮する

巨大なデータベースのフルバックアップは、高速なストレージ(Fusion-ioDriveなど)を使用していても1~2時間かかる

フルバックアップとDB処理負荷のピークがカサラ内容にする

フルバックアップの容量が数100GBになると外部ストレージに逃すにも時間がかかるし、帯域を食いつぶしてしまう

1GBのNICの帯域を食いつぶしてしまい、他の処理が遅延したりできなくなり別の障害原因となりうる

11

Page 17: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

インデックス再構築をしない

有名なパフォーマンスチューニングテクニックの一つに断片化が進んだインデックスの再構築がある

Standardエディションだと再構築中テーブルがブロックされてしまう

巨大なテーブルだとFusion-ioDriveを使用していても1時間とかかかってしまう

1時間かけて再構築してもデータの新規追加が頻繁にあるテーブルだと、1日で断片化率99%になってしまった

ディスクI/Oは、Fusion-ioDriveなどで担保し、再構築を実施しないという選択もあり

12

Page 18: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

データベースの複製は一箇所集約

SQL Server のライセンスはアクティブ-アクティブ構成の場合、両方分のライセンスが必要

データ分析などのために本番以外のサーバーで処理をしたい場合、複製をする必要がある

複製をするのにMySQLのようにMaster-Slave構成が取りにくい

集約用のデータベースサーバーを用意し、大容量ストレージを接続し複数のコンテンツを集約しライセンス費用を圧縮する

データ転送には、相当の時間がかかる

帯域の問題と、物理I/O、データ容量が多い

13

Page 19: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

デッドロック対策に情報収集策を用意する

デッドロックは突発的に発生することもある

デッドロック原因を特定するには情報を収集できる体制を用意しておく

トレースフラグ、拡張イベント、sys.dm_xe_sessionsのsystem_healthなどからデッドロックに関する情報を収集する

アプリケーションログだけでは原因特定がしにくいので、SQL Serverのログも活用する

拡張イベントは事前に仕込む必要があるが、sys.dm_xe_sessionsは後追いでも何とかなることもある

14

Page 20: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

性能問題に備えて性能情報を収集する

普段、何も問題なかったのに深夜5分間だけ、性能問題が発生した

性能情報をそれなりに収集しておかないと、後からでは原因特定が困難

パフォーマンスカウンターやDMVなどのそこそこ詳細な情報を収集しておかないと原因特定しきれない

収集しなければならない情報を精査し、それをグラフツールなどに格納していく

15

Page 21: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

パフォーマンスカウンターの種類に注意

性能情報を収集する際にはパフォーマンスカウンターの仕様を把握しておく

Batch Requests/secなどの値は累積カウンターになっており、グラフ描画などをする際には差分グラフにする必要がある

Windows標準ビュワーでは、よろしくやってくれているが、そのせいで仕様をしらないことがある

グラフ描画の値がおかしくなってしまう

差分を格納するようにし、カウンターグラフが正しい状態になった

16

Page 22: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

実行計画が狂うことがある

突発的にクエリの実行計画がおかしくなり、CPU使用率が跳ね上がることがある

今まで問題なかったのに、急に発生する

特定クエリのCPU時間が異常な値を示している

はっきり原因特定したわけではないが、恐らく統計情報がらみの問題

インデックスをいじったり、統計情報を更新すると終息する

何もしていないのにCPU使用率が跳ね上がったら、短期的には統計情報の陳腐化を疑う

データ構造やデータ容量の変化で実行計画がかわることがある。クエリヒントの使用も検討する

17

Page 23: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

インデックスの作成時にはテーブル件数に留意

インデックスを作成するのに必要な時間は、対象テーブルの件数や列数などに依存する

巨大なテーブルにインデックスを作成するには時間がかかる

Fusion-ioDrive環境下でも、200万件で6秒、2億件で15分かかる

Standardエディションでは、その間テーブルがロックされてしまう

低速なストレージだと、数時間単位になりうる

18

Page 24: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

AlwaysOnのセカンダリの状況に注意する

AlwaysOn可用性グループで同期コミットを形成している時に、セカンダリ側を再起動したらレスポンスが遅延した

セカンダリ側がダウンしたことを検知したら、同期ジョブはキューイングされる

検知する前に同期処理が始まったものは、TrasactionDelayが発生し、そのタイムアウトは10秒なので、10秒間クエリが処理されないことがある

メンテナンス前には、Alter文(HADR SUSPEND)で同期を停止しておくといい

19

Page 25: SQL Server運用実践 - 3年間80台の運用経験から20の教訓

ユーザーのアクセス権管理は悩みの種

データベースのアクセス権は慎重に設定する必要があるが、適切な範囲の維持が大変

複数のエンジニアが在籍している環境で、ユーザー個別にアクセス権を制御するのは一手間

Web.configの接続文字列などにパスワードが平文でっかれていたり

データベースのアクセス権を適切に設定し事故を未然に防ぐために共有アカウントを廃止したいが、なかなかできない

gloopsの場合、WebゲームはMobage経由でりりーするので、ユーザー情報はしかUIDしか保持しないので個人情報問題の懸念はない

20

Page 26: SQL Server運用実践 - 3年間80台の運用経験から20の教訓