Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
380
You and Java and English ,
zer0u
0
360
JJUG CCC 2015 Fall LT
zer0u
0
1.2k
Other Decks in Programming
See All in Programming
AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug
kishida
4
840
関数の挙動書き換える
takatofukui
4
760
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
170
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
5
16k
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
290
チーム開発の “地ならし"
konifar
8
6.7k
React Native New Architecture 移行実践報告
taminif
1
120
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
340
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
790
Microservices rules: What good looks like
cer
PRO
0
300
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
590
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
14k
Featured
See All Featured
Building Adaptive Systems
keathley
44
2.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Bash Introduction
62gerente
615
210k
KATA
mclloyd
PRO
32
15k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Context Engineering - Making Every Token Count
addyosmani
9
450
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
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 • 他もろもろ