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
6.9k
ねこでもわかる! 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
350
You and Java and English ,
zer0u
0
310
JJUG CCC 2015 Fall LT
zer0u
0
1.2k
Other Decks in Programming
See All in Programming
CSC509 Lecture 09
javiergs
PRO
0
100
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
390
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
410
Realtime API 入門
riofujimon
0
100
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
4
1.5k
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.2k
Vue3の一歩踏み込んだパフォーマンスチューニング2024
hal_spidernight
3
3.1k
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
220
Honoの来た道とこれから
yusukebe
19
3k
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.1k
色々なIaCツールを実際に触って比較してみる
iriikeita
0
260
推し活としてのrails new/oshikatsu_ha_iizo
sakahukamaki
3
1.6k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
268
27k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Unsuck your backbone
ammeep
668
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
1
39
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Agile that works and the tools we love
rasmusluckow
327
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Into the Great Unknown - MozCon
thekraken
31
1.5k
The Language of Interfaces
destraynor
154
24k
Building an army of robots
kneath
302
42k
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 • 他もろもろ