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.2k
古のJavaを使うということ / JJUC CCC 2016 Spring
zer0u
12
13k
kbkz_tech9
zer0u
0
360
You and Java and English ,
zer0u
0
340
JJUG CCC 2015 Fall LT
zer0u
0
1.2k
Other Decks in Programming
See All in Programming
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
670
Is Xcode slowly dying out in 2025?
uetyo
1
180
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
170
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
41
28k
複数アプリケーションを育てていくための共通化戦略
irof
10
4k
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
220
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
1
100
Datadog RUM 本番導入までの道
shinter61
1
310
GoのWebAssembly活用パターン紹介
syumai
3
10k
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
760
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
16
940
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Documentation Writing (for coders)
carmenintech
71
4.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
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 • 他もろもろ