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
CEDEC2025 長期運営ゲームをあと10年続けるための0から始める自動テスト ~4000項目を50%自動化し、月1→毎日実行にした3年間~
akatsukigames_tech
0
150
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
13
7.5k
オープンセミナー2025@広島LT技術ブログを続けるには
satoshi256kbyte
0
120
学習を成果に繋げるための個人開発の考え方 〜 「学習のための個人開発」のすすめ / personal project for leaning
panda_program
1
110
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
8
3.2k
ゲームの物理
fadis
5
1.5k
兎に角、コードレビュー
mitohato14
0
150
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
TDD 実践ミニトーク
contour_gara
0
140
ライブ配信サービスの インフラのジレンマ -マルチクラウドに至ったワケ-
mirrativ
2
260
エンジニアのための”最低限いい感じ”デザイン入門
shunshobon
0
130
UbieのAIパートナーを支えるコンテキストエンジニアリング実践
syucream
2
700
Featured
See All Featured
A Tale of Four Properties
chriscoyier
160
23k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
KATA
mclloyd
32
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Rails Girls Zürich Keynote
gr2m
95
14k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
GitHub's CSS Performance
jonrohan
1031
460k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
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 • 他もろもろ