SlideShare a Scribd company logo
1

NW遅延環境(Paas)での
チューニングTips
河原 翔

※Linux環境に基づいた内容です
PostgreSQLアンカンファレンス@東京 (7/13)
2

NW遅延とは?
ネットワーク遅延とは、データを送信してから通信相手に届くまで
の時間と、その応答を通信相手が送信してから送信元に届くまでの合
計時間を指す。
つまりデータを入れたパケットが伝送経路を通過するのにかかる時
間(伝搬遅延)と、経路上のルーターなどの機器が処理する時間(処
理遅延)などを足し合わせたものだ。
LAN内であれば、ネットワーク遅延は1ミリ~3ミリ秒程度。しかし社
外にある国内のデータセンターとのやり取りでは十数ミリ秒、海外の
データセンターでは100ミリ秒を超えることもある。
ITproより引用
http://itpro.nikkeibp.co.jp/article/COLUMN/20121005/428005/

• 国外の会社が運営しているPaasのデータセンタは海外に
あることが多いため、NW遅延の影響を受ける可能性が高い
(Amazon等の大手は日本国内にもデータセンタがある)
3

実際にどれくらいの影響があるのか?
• 無料で利用できる「Heroku Postgres」を利用
▫ 「Heroku Postgres」の詳細は割愛
4

実際にどれくらいの影響があるのか?
• 約170msのNW遅延がある状態で、接続→SQL発行→切断の
時間を測定する

NW遅延

約170ms

さくらのVPS
大阪リージョン

$ psql "dbname=xxx-1.amazonaws.com /
user=yyy password=zzz port=5432 /
sslmode=require"
/
-c 'select * from test' > /dev/null

Heroku Postgres

=> table test;
val
----x
(1 row)
5

実際にどれくらいの影響があるのか?
• クライアントがサーバ にTCPSYNパケットを送出してから
クライアントがサーバからRSTACKパケットを受信するまでの
時間は約1400msとなった

SSLセッション確立のための
時間が大半を占める
6

実際にどれくらいの影響があるのか?
• クエリ発行前の各種コネクション確立のための時間が大半を
占めるため、初回確立後であれば、(ACK待ちが発生しなければ)
NW遅延1回分の影響のみで済む
$ psql "dbname=xxx-1.amazonaws.com user=yyy password=zzz port=5432 sslmode=require"
=> explain analyze table test;
QUERY PLAN
--------------------------------------------------------------------------Seq Scan on test (cost=0.00..1.00 rows=1 width=32)
(actual time=0.021..0.022 rows=1 loops=1)
Total runtime: 0.103 ms
(2 rows)
=> ¥timing
Timing is on.
=> table test;
val
-------x
(1 row)
Time: 183.563 ms
=>

explainではデータ転送時間は含まれない模様
※auto_explainの対象にならない

¥timingではデータ転送時間も含まれる模様
7

【対応策】
• コネクションプーリングを利用する
▫ 初回接続時の各種コネクション確立のコストを
抑えるため
 プロセス生成と終了のコストを抑えるためではない
 各種コネクション確立後であれば、ACK待ちが発生しなければ
NW遅延1回分の影響のみで済む

▫ pgpoolはVer2.3.2からSSLをサポート
▫ PgBounserはSSLは不可?
8

【対応策】
• クエリの発行回数を抑える
▫ ストアドプロシージャを利用する
 とあるOSSのブログシステムでは、画面遷移の度にクエリが
20回以上発行されることも…

▫ 一度のクエリで送受信するデータ量を増やす
 一度のINSERT文で複数レコード挿入可能なことを知らない
エンジニアも結構いるかと…
 ただし、ACK待ちは発生させないように考慮すること
9

ACK待ちとは?
TCPでは、ACKの応答確認により信頼確保されているが、パケットを送
信する度にACKを送信していてはさすがに通信速度が遅くなってしまい
ます。そこでTCPヘッダにあるウィンドウサイズを利用することにより
この問題を解決しています。ウィンドウサイズとは、ACKを待たずに一
度に送信できるデータ量のことです。
例えば、3900バイトのデータを3回に分けて送信する場合、1300バイ
トのデータを送るたびにACKを待っていると通信速度は遅いですが、
ウィンドウサイズが「3900」であることを相手側のホストに伝えた場合、
送信側はACKを待つことなく3900バイトのデータを送信することができ
ます。これにより通信速度が速まる。
※ ちなみに、Windows XPの受信ウィンドウサイズはデフォルトで
「65535」バイトとなります。ウィンドウサイズはOSにより異なります。
しかし、これではウィンドウサイズ分のデータを送信した後、ACKを
受信するまでの間、待ち時間が発生する。
「ネットワークエンジニアとして」より引用
http://www.infraexpert.com/study/tcpip11.html
10

ACK待ちを考慮する必要は?
• 1クエリでのデータ送信量が数十KB以上あるような
ケースでなければACK待ちが発生する可能性は低い
▫ 新しめのLinux Kernelは初期ウィンドウサイズが
10と大きめに設定されているため、ACK待ちは発生し
難くなっている
▫ デフォルトでsslcompressionはONであるため、
SSL接続でのデータ転送は自動的に圧縮される
 ACK待ちが発生するかを事前に計算して
正確に推測することは困難

▫ TCPのチューニングが可能であることは意識すべき
 tcp_slow_start_after_idleはoffにするとか…
11

【要点】
• コネクションプーリングを利用する
▫ 初回接続時の各種コネクション確立のコストを抑える
 プロセス生成と終了のコストを抑えるためではない

• クエリの発行回数を抑える
▫ ストアドプロシージャを利用する
▫ 一度のクエリで送受信するデータ量を増やす

• ACK待ちの影響を最小限にする
▫ 1クエリでのデータ送信量を、ACKを受信せずに
一度に送信できるデータ量以下に収めるようにする
▫ TCP初期ウィンドウサイズの大きいKernelを採用する

More Related Content

What's hot

PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
Uptime Technologies LLC (JP)
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!
歩 柴田
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
動的コンテンツをオリジンとしたCloudFrontを構築してみた
動的コンテンツをオリジンとしたCloudFrontを構築してみた動的コンテンツをオリジンとしたCloudFrontを構築してみた
動的コンテンツをオリジンとしたCloudFrontを構築してみた
Taiki Kawamura
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo!デベロッパーネットワーク
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
Takashi Hoshino
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
昌桓 李
 
Spring Cloud Data Flow の紹介 #streamctjp
Spring Cloud Data Flow の紹介  #streamctjpSpring Cloud Data Flow の紹介  #streamctjp
Spring Cloud Data Flow の紹介 #streamctjp
Yahoo!デベロッパーネットワーク
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
Toru Makabe
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 

What's hot (20)

PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
動的コンテンツをオリジンとしたCloudFrontを構築してみた
動的コンテンツをオリジンとしたCloudFrontを構築してみた動的コンテンツをオリジンとしたCloudFrontを構築してみた
動的コンテンツをオリジンとしたCloudFrontを構築してみた
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
Spring Cloud Data Flow の紹介 #streamctjp
Spring Cloud Data Flow の紹介  #streamctjpSpring Cloud Data Flow の紹介  #streamctjp
Spring Cloud Data Flow の紹介 #streamctjp
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 

Similar to NW遅延環境(Paas)でのPostgreSQLの利用について

ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
Jun Kato
 
Cloud20150802
Cloud20150802Cloud20150802
Cloud20150802
Uemura Yuichi
 
D35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu Hara
D35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu HaraD35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu Hara
D35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu HaraInsight Technology, Inc.
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)
Wataru Fukatsu
 
DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向
Jun Kurihara
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
Takaaki Hoyo
 
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
tzm_freedom
 
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
情報セキュリティの啓蒙と仮想ネットワーク構築  Dos情報セキュリティの啓蒙と仮想ネットワーク構築  Dos
情報セキュリティの啓蒙と仮想ネットワーク構築 Dosk009c1271
 
システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論shigaoki
 
システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8
shingo suzuki
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
M Hagiwara
 
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
Akira Suzuki
 
20151213 kfug lt_sdn_sugihara
20151213 kfug lt_sdn_sugihara20151213 kfug lt_sdn_sugihara
20151213 kfug lt_sdn_sugihara
Kota Sugihara
 
Protocol2018
Protocol2018Protocol2018
Protocol2018
rung (Hiroki Suezawa)
 

Similar to NW遅延環境(Paas)でのPostgreSQLの利用について (18)

Mmo game networking_1
Mmo game networking_1Mmo game networking_1
Mmo game networking_1
 
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
 
M1 gp_OneSwarm
M1 gp_OneSwarmM1 gp_OneSwarm
M1 gp_OneSwarm
 
Cloud20150802
Cloud20150802Cloud20150802
Cloud20150802
 
D35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu Hara
D35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu HaraD35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu Hara
D35 NonStop SQLはなぜグローバルに分散DBを構築できるのか、データの整合性を保てるのか、その深層に迫る byToshimitsu Hara
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)
 
DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
 
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
情報セキュリティの啓蒙と仮想ネットワーク構築  Dos情報セキュリティの啓蒙と仮想ネットワーク構築  Dos
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
 
システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論
 
システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8
 
計算機理論入門08
計算機理論入門08計算機理論入門08
計算機理論入門08
 
Ppt fukui g
Ppt fukui gPpt fukui g
Ppt fukui g
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
 
20151213 kfug lt_sdn_sugihara
20151213 kfug lt_sdn_sugihara20151213 kfug lt_sdn_sugihara
20151213 kfug lt_sdn_sugihara
 
Protocol2018
Protocol2018Protocol2018
Protocol2018
 

NW遅延環境(Paas)でのPostgreSQLの利用について