notebook

都内でWEB系エンジニアやってます。

反省

先日の業務で、自分のせいで色々な方に迷惑をかけてしまいました。 反省点が多かったので、戒めとして残しておきます。

行った作業は、DBへのパーティションを張る作業、既に6000万レコード数くらいのテーブルにも張ったりする必要がある作業です。

手順は下記 ・slaveでパーティション張る ・masterとslave入れ替え ・slaveでパーティション張る

という予定でした。

ですが、入れ替え直後にパフォーマンスで致命的な欠点が見つかり3時間ほどDBが詰まってサービスが実質停止している状態に陥れてしまいました。

原因は今までフルインデックススキャンで走っていたSQLがあったがパーティションを貼っていなかったためそこまで遅くならなかった しかし、今回パーティションを張ったことで各パーティションにフルインデックススキャンを行うという挙動になってしまい障害につながった 先輩に見てもらい結局インデックスを張りなおすことで負荷を下げることができました。

反省点は下記 ・既に運用フェーズに入ってから1年以上経過しているサービスだったので、今動いている状態が正だと思い込んでパフォーマンスまで気を回せなかった パーティションを追加することでアプリケーション側で問題があるかどうかだけしか考慮できませんでした。結果思わぬところでインデックスがしっかり利いていない事実に気づかず、障害につながった。 ・準備不足 slave側での作業を当日切り替え前に行った、作業は作業前日までにも出来る作業だったが、結局作業日まで着手することが出来なかった。 作業当日まで自分の行う作業をしっかり認識していなかった、もちろん手順書も作っていなかったので作業前に作るという愚行。 前日までに手順書、作業内容をしっかり把握し、リスクなどを理解しておくべきだった。 最後に準備不足が明らかだったのに実行に踏み切ってしまったこと、忙しいなら忙しいでリスケできるように進言するべきだった。 ・当事者意識の不足 日程が決まった時点で作業の分担を明確にして、自分の責任を実感しておくべきだった。 他の作業に追われて結局なぁなぁになってしまい。今回のような事体を招いてしまった。

など、挙げればきりが無いですが、今後このようなことを起こさないようにしっかりしなければと思いました。

他にも色々あって正直大分参っています。。。