Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ねこでもわかる! ITインフラ・パフォーマンスチューニング
Search
zer0-u
February 01, 2015
Programming
16
7k
ねこでもわかる! ITインフラ・パフォーマンスチューニング
2015年1月末の社内勉強会にて
zer0-u
February 01, 2015
Tweet
Share
More Decks by zer0-u
See All by zer0-u
OCJP for good coding #jjug_ccc #ccc_m3
zer0u
1
1.3k
古のJavaを使うということ / JJUC CCC 2016 Spring
zer0u
12
13k
kbkz_tech9
zer0u
0
370
You and Java and English ,
zer0u
0
350
JJUG CCC 2015 Fall LT
zer0u
0
1.2k
Other Decks in Programming
See All in Programming
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
440
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
8
560
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
270
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
17
3.7k
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
3
520
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
segadevtech
2
750
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
41
16k
JetBrainsのAI機能の紹介 #jjug
yusuke
0
190
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
2k
DynamoDBは怖くない!〜テーブル設計の勘所とテスト戦略〜
hyamazaki
0
180
Flutterと Vibe Coding で個人開発!
hyshu
1
230
リッチエディターを安全に開発・運用するために
unachang113
1
350
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
750
The Language of Interfaces
destraynor
158
25k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Typedesign – Prime Four
hannesfritz
42
2.7k
Code Review Best Practice
trishagee
69
19k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
The Invisible Side of Design
smashingmag
301
51k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.7k
Transcript
ねこでもわかる! ITインフラ・パフォーマンスチューニング
はじめに • この講座の目的 – ITインフラの基本的な構造を知る – 分からないところを自分で調べられるようになる • この講座だけで知りたいことが全部分かる? –
そんなわけない
話すこと • ITインフラとは何か? • パフォーマンスとは何か? • パフォーマンスチューニング手習い
話さないこと • 詳しいこと • 難しいこと • 個別事例
話すこと • ITインフラとは何か? • パフォーマンスとは何か? • パフォーマンスチューニング手習い
ITインフラとは何か? • ITサービスを提供するために必要な基盤一式 – サーバ – ネットワーク – OS (Operating
System) Windows/Unix/Linux/Mac など – MW (MiddleWare) Oracle/Weblogic など
インフラの世界は広い • 「インフラ」といわれても指しているものがさまざま – ネットワークだけ? – サーバだけ? – 構成のこと? •
今回は「基盤一式」のことを「インフラ」と呼ぶ • 「これなら全部解決する!」という構成はない – 利用規模や目的によって最適な構成が異なる – 「インフラデザインパターン」というものもある
インフラ構成のパターン 大きく分けると2つ • 分散しない • 分散する – 垂直分散型 – 水平分散型
垂直分割型 • 複数のサーバを設置し、それぞれが別の役割を担う 例)クライアント・サーバ型 3層構造型 水平分割型 • 同じ役割のサーバを増やす – 単純水平分割型
• 支社や事業所ごとに完全に分離する – シェアード型 • 一部の層(DBなど)に限定して相互に通信する
インフラさまざま • 自分が対象としているシステムの構成は?
話すこと • ITインフラとは何か? • パフォーマンスとは何か? • パフォーマンスチューニング手習い
パフォーマンスとは? • 実生活に置き換えて考えてみる • 例)新入社員のためにPCをセッティング – 4月から新卒が100人入社する – 1台のセッティングにかかる時間は30分 –
1時間にセッティングできる台数は2台 • 先輩「もっと早くしてほしいな」
パフォーマンスとは? • 案1:人数を増やす – 「自分だけじゃ無理なので手伝ってもらいます」 • 1人→10人に増えた • 1時間あたりの設置台数が10倍になった
パフォーマンスとは? • 案2:設置手順を見直す – 「無駄をなくして効率化します」 • 30分/台→20分/台に短縮できた • 1台あたりの設置時間が2/3になった
パフォーマンスとは? • 先輩の言葉 = パフォーマンス向上要求 • 案1:人数を増やす = スループットの向上 •
案2:設置手順を見直す = レスポンスの向上 • パフォーマンスには2つの要素がある – スループット – レスポンス
パフォーマンスとは? • システムに置き換えて考えてみる • 自分が向上させたいものは何か? – スループット? – レスポンス? –
両方?
話すこと • ITインフラとは何か? • パフォーマンスとは何か? • パフォーマンスチューニング手習い
パフォーマンスチューニング手習い • パフォーマンスチューニングの大原則 「推測するな、計測しろ」 • やみくもに高速化を図っても意味がない – むしろ逆効果かもしれない
推測するな、計測しろ • PC設置の例 • これらが「だいたいこのくらい」だったら? – 1台の設置にかかる時間 – 作業にあたっている人数
推測するな、計測しろ • 効率よく計測するには? →はさみうちの原則を使う • 時間的はさみうち – 「昼ごろだけとても重い」 • 場所的はさみうち
– 「社内ネットワークでは早いのに…」
推測するな、計測しろ • 計測のための情報 – サマリ形式 • 一定時間の情報を要約して出力 – イベントログ形式 •
何かが起きるたびに記録 – スナップショット形式 • ある時点での状態を丸ごと取得
データベースが重いようだ • ログ分析の結果、どうやらDB内の処理が異様に 遅くなっているようだとわかった • http://www.atmarkit.co.jp/ait/articles/0406/21/news085_2.html
SQLチューニング • SQLチューニングをしよう – すぐできる – 少しの手間で大きな改善 – 今持ってる知識で改善できる …それ、本当に?
SQLってなんだっけ • SQL = Structured Query Langage =構造化された問い合わせ言語 • SQLに書いてあることは「求めるデータの条件」
=「どんなデータがほしいか」 • 類:Java • Javaで書くのは「求めるデータの探し方」 =「データをどのように探すか」
SQLってなんだっけ • Java (探し方 = アルゴリズムを記述) • SQL (条件を記述) Select
column1 From table1 Where column1 = 1000 List<Integer> results = ArrayList<>(); for (Row row : tableRows) { if (row.getIntValue("column1") == 1000) { results.add(row); } } return results;
SQLってなんだっけ • SQLを入れると、何らかの処理の後に結果が出てくる SQL 結果 ???
SQLってなんだっけ • これが「実行エンジン」 SQL 結果 実行エンジン
SQLってなんだっけ • 実行エンジンは「実行計画」という「探し方」を 参照している SQL 実行計画 実行エンジン 結果 参照
SQLってなんだっけ • 実行計画は「リレーショナルエンジン」が 「統計情報」を元に作成 統計 情報 実行 計画 リレーショナル エンジン
SQLってなんだっけ • あわせるとこんな感じ 統計情報 実行計画 リレーショナル エンジン SQL 結果 実行エンジン
実データ
統計情報と実行計画 • 統計情報 = 実データをモデル化したもの – 表のサイズ – 行数 –
データ分布(ヒストグラム) – など • 統計情報があることで、実データを参照せずに 実行時の大体の予測ができる – 統計学の難しい話なので以下略
統計情報と実行計画、そして実データ • 統計情報 = 実データをモデル化したもの =実データが日々変動するものである以上、 統計情報が日々更新されるのは当たり前 • 実行計画 =
統計情報をもとに作られるもの = 統計情報が変化するなら 実行計画が変化しないほうがおかしい – 実行計画を固定する方法もあるが難しいので略
つまり • この部分は変化しやすい = ここを頼りにするのは難しい 統計情報 実行計画 リレーショナル エンジン SQL
結果 実行エンジン 実データ
実行計画とパフォーマンス • 実行計画が最適化されていると 主にレスポンスタイムが向上する = データを取得、加工する時間が短くなる • 実行計画が最適化されていても パフォーマンスが向上するとは限らない →どういう時?
実行計画とパフォーマンス • 同じテーブルに複数回アクセスするSQL文のまとまり →インデックスを利用する計画になっていると むしろパフォーマンス低下につながる 1つ1つのアクセスは最適化されているが、 全体として見ると最適ではない例
実行計画とパフォーマンス • ループ内でSQL文を実行していたりすると よく起きる構造 →アプリケーションだけ、SQLだけ見ても気づかない 1つ1つのアクセスは最適化されているが、 全体として見ると最適ではない例
ということは • アプリケーションからデータベースまで、 全体をきちんと計測・把握しないと 最大のパフォーマンスは望めない → そのチューニング、本当にパフォーマンス向上に 寄与してますか?
余談 : 大局観を身につけるために • 全体を把握することはすぐにはできない • 地道に少しずつ学ぶほかない
余談 : 大局観を身につけるために • 普段行っていることを緊急度と重要度で分類する 緊急ではない 重要ではない 重要 緊急
余談 : 大局観を身につけるために • 地道に学んでいくこと=緊急ではないが重要なこと 緊急ではない 重要ではない 重要 緊急
余談 : 大局観を身につけるために • 「ITなんて変化が早いんだから とにかく新しい情報が必要なんだよ」 • 「とにかく目先の問題を解決したいから」 →だからこそ基本的なところから勉強する必要がある
最後に • 「そうは言っても勉強する時間がない」 • → 「X月X日に~~~について発表する」と決める – 逃げ道を塞ぐ – 自分がわからないところが明確になる
• 発表してみるといいかもしれません
参考資料 • Java8でRDBMSつくったよ(@kis) http://www.slideshare.net/nowokay/with-java8 • 実例Javaトラブルシューティング! (@cero_t) http://www.slideshare.net/shintanimoto/half-yeartroubleshooting • Oracle
SQLチューニング講座 http://www.atmarkit.co.jp/ait/kw/oracle_sql_tuning.html • 絵で見て分かるITインフラの仕組み 山崎泰史 他 翔泳社 2012 http://amzn.to/1FrqNrT • インフラエンジニアの教科書 佐野裕 シーアンドアール研究所 2013 http://amzn.to/1ahUBOc • 絵で見て分かるシステムパフォーマンスの仕組み 小田圭二 他 翔泳社 2014 http://amzn.to/1ahUSAU • 絵で見て分かるOracleの仕組み 小田圭二 翔泳社 2006 http://amzn.to/1FuAplv • 他もろもろ