SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Tatsuro Hisamori
                  DeNA Co.,Ltd.




2010   10   17
•              (Tatsuro Hisamori)

                 •
                     •   mbga OpenPlatform

                         •           /

                         •
                         •         etc

2010   10   17
mbga OpenPlatform

                 •                 16:00    id:ZIGOROu
                     Inside mbga Platform

                                            (^0^v




2010   10   17
• Social Application   /




2010   10   17
•



                 •

2010   10   17
2010   10   17
•
                     •
                 •   Gadget / API

                     •
                 •   Platform

                     •
                 •              tcpdump

2010   10   17
•
                     •


                 •       DB

                     •
2010   10   17
•
                 •
            • DB
                 •
            •
                 •
2010   10   17
• request -> response
                  • WAF
                    •         request    finalize

                  • Apache
                    • CustomLog %D
2010   10   17
use Time::HiRes qw/gettimeofday tv_interval/;

       sub pre_request {
         my ( $c, $args ) = @_;

            $c->stash->{__start_time} = [gettimeofday];
       }

       sub finalize {
         my ( $c, $args ) = @_;

            $c->log->debug( $process_time = tv_interval($c->stash->{__start_time},
            [gettimeofday]));
       }


2010   10   17
• %D               GadgetServer

            •        %D    request line                     response


                  # protocol.c (httpd-2.2.16)
                 static int read_request_line(request_rec *r, apr_bucket_brigade *bb)
                  {

                 r->request_time = apr_time_now();

                 }


2010   10   17
• GadgetServer
        • alarm() SIGALRM
                 #
                 eval {
                   local $SIG{ALRM} = sub {die};
                   alarm($TIMEOUT);
                   $response = $ua->request($URL);
                   alarm(0);
                 }

                                           )
2010   10   17
•
                     TCP

                     • tcpdump + wireshark
                         Casual              (^0^v



2010   10   17
$ tcpdump -i bond0 -s 1500 -n –w tcp.dump 'host gadgetserver'



                  • -w

                  •                               wireshark

                      •                                 stream

2010   10   17
DB


                 • DB
                  • DBI::Profile
                  • DBIx::ProfileManager
                  • mk-query-digest(maatkit)

2010   10   17
DBI::Profile
            • DBI
                 use DBI;
                 use DBI::Profile;

                 my $dbh = DBI->connect("dbi:mysql:db=test;”,"root", ””);
                 $dbh->{Profile} = q|!Statement|;
                 $dbh->selectall_arrayref("SELECT ?", undef, $_) for ( qw/1 2 3/ );




       DBI::Profile: 0.000399s 91.38% (7 calls) test.pl @ 2010-10-12 21:08:03
       'SELECT ?' =>
          0.000399s / 7 = 0.000057s avg (first 0.000177s, min 0.000002s, max 0.000177s)


2010   10   17
DBIx::ProfileManager
            • handle                 attibute


                 use DBI;
                 use DBIx::ProfileManager;

                 my $dbh = DBI->connect(...);

                 my $pm = DBIx::ProfileManager->new;
                 $pm->profile_start;

                 my $res = $dbh->selectall_arrayref(...);

                 $pm->profile_stop;
                 my @results = $pm->data_formatted;
                 local $, = "n"; print @results;
2010   10   17
DBIx::ProfileManager

            • profile_start profile_stop
            • data_formatted format
                 # sample
                 $pm->data_formatted(
                    q|%{statement} : %{max}, %{min}, %{avg}|
                 );

        •                   DeNA

             •   http://engineer.dena.jp/2010/03/dbixprofilemanager-sql-profiling.html

2010   10   17
Catalyst
        # MyApp.pm
       use DBIx::ProfileManager;

       sub prepare_request {
         my ( $c, $args ) = @_;

            my $pm = DBIx::ProfileManager->new(%config);
            $pm->profile_start;
            $c->stash->{__dbix_profilemanager} = $pm;

       }

       sub finalize {
         my ( $c, $args ) = @_;

            my $pm = $c->stash->{__dbix_priflemanager};
            $pm->profile_stop;
            #     $pm->data_formatted
       }


2010   10   17
DB

            •    slowlog                                        mk-query-digest
                       # Query 8: 44.67 QPS, 0.13x concurrency, ID 0x6516D7E6698E425A at byte 108467522
                       # Attribute pct total min max avg 95% stddev median
                       # ========= ====== ======= ======= ======= ======= ======= ======= =======
                       # Count           2 317
                       # Exec time        2 944ms       0 205ms 3ms 2ms 22ms 108us
                       # Hosts              181 10.5.9.20 (7/2%), 10.5.10.157 (6/1%)... 179 more
                       # Databases            1 platform
                       # Time range 2010-10-12 13:21:53.218711 to 2010-10-12 13:22:00.315719
                       # bytes         1 20.43k     66     68 66.01 65.89         0 65.89
                       # Errors              1 none
                       # Rows affe       0    0      0     0     0      0    0     0
                       # Warning c        0    0     0     0      0     0     0    0
                       # Query_time distribution
                       # 1us
                       # 10us ####################################################
                       # 100us ################################################################
                       # 1ms #########
                       # 10ms #
                       # 100ms #
                       # 1s
                       # 10s+
                       # Tables
                       # SHOW TABLE STATUS FROM `db` LIKE 'entry'G
                       # SHOW CREATE TABLE `db`.`entry`G
                       # EXPLAIN
                       select id, type from entry where id = xxx
                       G


2010   10   17
DB
                     •
            # Query_time distribution
            # 1us
            # 10us ####################################################
            # 100us ######################################################
            # 1ms #########
            # 10ms #
            # 100ms #
            # 1s
            # 10s+


                 •
                 •            SQL                                explain


2010   10   17
•
                 •
                 •
                             ↓
             mk-query-digest tcpdump     !!
                     mysql       dump   OK
2010   10   17
DB
                 •
                     •

                 •
                     •
                     •
                     •
2010   10   17
DB
                 •
                     •
  $mysqladmin -uroot -p extended-STATUS | egrep '(Max|Threads_)'
  | Max_used_connections       | 68      |
  | Threads_cached             | 36      |
  | Threads_connected          | 32      |
  | Threads_created           | 68       |
  | Threads_running           |5         |



2010   10   17
DB
                  •
                      •

                 $ mysqladmin -uroot -p -hdbsrv status | awk '{print $22}'
                 9780.895




2010   10   17
DB
                 •
                     •
   $ sar
   13:00:01              CPU   %user   %nice   %system   %iowait   %idle
   13:10:01              all   0.97    0.00    0.32      0.36      98.35
   13:20:01              all   0.80    0.00    0.30      0.25      98.65
   13:30:01              all   0.81    0.00    0.29      0.28      98.62
   13:40:01              all   0.73    0.00    0.28      0.24      98.76



2010   10   17
ex. open Platform

                 •
                 •
                 •


                 •
                 •

2010   10   17
•
                     • from tcpdump & GadgetServer   timeout

                 •
                             100   200ms



                     • ex.
2010   10   17
•

            •    ping, traceroute etc

       •
            •                            10ms   (   )


            •           EC2       100ms 200ms

2010   10   17
•
            • platform <->
            •         <->    (Web <-> DB)

            • VM
       •           I/O

            •
2010   10   17
•

                     •   ex. Platform
                             @mbga OpenPlatform

                 •
                                                  TCO


2010   10   17
•
                 •
            •    DB

                 •
            •
                 •

2010   10   17
2010   10   17
Thanks!


2010   10   17

Mais conteúdo relacionado

Mais procurados

MongoDB Analytics
MongoDB AnalyticsMongoDB Analytics
MongoDB Analytics
datablend
 
Nko workshop - node js crud & deploy
Nko workshop - node js crud & deployNko workshop - node js crud & deploy
Nko workshop - node js crud & deploy
Simon Su
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
AOE
 

Mais procurados (20)

MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & Analytics
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 
MongoDB: How it Works
MongoDB: How it WorksMongoDB: How it Works
MongoDB: How it Works
 
ZeroMQ Is The Answer: DPC 11 Version
ZeroMQ Is The Answer: DPC 11 VersionZeroMQ Is The Answer: DPC 11 Version
ZeroMQ Is The Answer: DPC 11 Version
 
Opa hackathon
Opa hackathonOpa hackathon
Opa hackathon
 
Redis for the Everyday Developer
Redis for the Everyday DeveloperRedis for the Everyday Developer
Redis for the Everyday Developer
 
It's 10pm: Do You Know Where Your Writes Are?
It's 10pm: Do You Know Where Your Writes Are?It's 10pm: Do You Know Where Your Writes Are?
It's 10pm: Do You Know Where Your Writes Are?
 
Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012
 
Roll Your Own API Management Platform with nginx and Lua
Roll Your Own API Management Platform with nginx and LuaRoll Your Own API Management Platform with nginx and Lua
Roll Your Own API Management Platform with nginx and Lua
 
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, ItalyPHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
 
Database Wizardry for Legacy Applications
Database Wizardry for Legacy ApplicationsDatabase Wizardry for Legacy Applications
Database Wizardry for Legacy Applications
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
DashProfiler 200807
DashProfiler 200807DashProfiler 200807
DashProfiler 200807
 
Abusing text/template for data transformation
Abusing text/template for data transformationAbusing text/template for data transformation
Abusing text/template for data transformation
 
MongoDB Analytics
MongoDB AnalyticsMongoDB Analytics
MongoDB Analytics
 
Nko workshop - node js crud & deploy
Nko workshop - node js crud & deployNko workshop - node js crud & deploy
Nko workshop - node js crud & deploy
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talk
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDB
 
The promise of asynchronous php
The promise of asynchronous phpThe promise of asynchronous php
The promise of asynchronous php
 

Destaque (6)

YAPCEurope2014-myfinder
YAPCEurope2014-myfinderYAPCEurope2014-myfinder
YAPCEurope2014-myfinder
 
YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきました
 
Riakmeetup2forupload
Riakmeetup2foruploadRiakmeetup2forupload
Riakmeetup2forupload
 
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
 
My sql event_scheduler_casual_slideshare__
My sql event_scheduler_casual_slideshare__My sql event_scheduler_casual_slideshare__
My sql event_scheduler_casual_slideshare__
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ
 

Semelhante a ソーシャルアプリ向けシステム監視運用の勘所

Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
AOE
 

Semelhante a ソーシャルアプリ向けシステム監視運用の勘所 (20)

Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the code
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the code
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Spark Streaming with Cassandra
Spark Streaming with CassandraSpark Streaming with Cassandra
Spark Streaming with Cassandra
 
Consul ou comment bien tirer sur l’élastique
 Consul ou comment bien tirer sur l’élastique Consul ou comment bien tirer sur l’élastique
Consul ou comment bien tirer sur l’élastique
 
uerj201212
uerj201212uerj201212
uerj201212
 
Redis for your boss 2.0
Redis for your boss 2.0Redis for your boss 2.0
Redis for your boss 2.0
 
Osol Pgsql
Osol PgsqlOsol Pgsql
Osol Pgsql
 
tdc2012
tdc2012tdc2012
tdc2012
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
 
ROracle
ROracle ROracle
ROracle
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
 
How to use the new Domino Query Language
How to use the new Domino Query LanguageHow to use the new Domino Query Language
How to use the new Domino Query Language
 
High-Performance Hibernate Devoxx France 2016
High-Performance Hibernate Devoxx France 2016High-Performance Hibernate Devoxx France 2016
High-Performance Hibernate Devoxx France 2016
 
Reactive Stream Processing Using DDS and Rx
Reactive Stream Processing Using DDS and RxReactive Stream Processing Using DDS and Rx
Reactive Stream Processing Using DDS and Rx
 
Fosdem10
Fosdem10Fosdem10
Fosdem10
 
Emerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonEmerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the Horizon
 
Percona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL AdministrationPercona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL Administration
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 

ソーシャルアプリ向けシステム監視運用の勘所

  • 1. Tatsuro Hisamori DeNA Co.,Ltd. 2010 10 17
  • 2. (Tatsuro Hisamori) • • mbga OpenPlatform • / • • etc 2010 10 17
  • 3. mbga OpenPlatform • 16:00 id:ZIGOROu Inside mbga Platform (^0^v 2010 10 17
  • 4. • Social Application / 2010 10 17
  • 5. • 2010 10 17
  • 6. 2010 10 17
  • 7. • • Gadget / API • • Platform • • tcpdump 2010 10 17
  • 8. • • DB • 2010 10 17
  • 9. • • DB • • • 2010 10 17
  • 10. • request -> response • WAF • request finalize • Apache • CustomLog %D 2010 10 17
  • 11. use Time::HiRes qw/gettimeofday tv_interval/; sub pre_request { my ( $c, $args ) = @_; $c->stash->{__start_time} = [gettimeofday]; } sub finalize { my ( $c, $args ) = @_; $c->log->debug( $process_time = tv_interval($c->stash->{__start_time}, [gettimeofday])); } 2010 10 17
  • 12. • %D GadgetServer • %D request line response # protocol.c (httpd-2.2.16) static int read_request_line(request_rec *r, apr_bucket_brigade *bb) { r->request_time = apr_time_now(); } 2010 10 17
  • 13. • GadgetServer • alarm() SIGALRM # eval { local $SIG{ALRM} = sub {die}; alarm($TIMEOUT); $response = $ua->request($URL); alarm(0); } ) 2010 10 17
  • 14. TCP • tcpdump + wireshark Casual (^0^v 2010 10 17
  • 15. $ tcpdump -i bond0 -s 1500 -n –w tcp.dump 'host gadgetserver' • -w • wireshark • stream 2010 10 17
  • 16. DB • DB • DBI::Profile • DBIx::ProfileManager • mk-query-digest(maatkit) 2010 10 17
  • 17. DBI::Profile • DBI use DBI; use DBI::Profile; my $dbh = DBI->connect("dbi:mysql:db=test;”,"root", ””); $dbh->{Profile} = q|!Statement|; $dbh->selectall_arrayref("SELECT ?", undef, $_) for ( qw/1 2 3/ ); DBI::Profile: 0.000399s 91.38% (7 calls) test.pl @ 2010-10-12 21:08:03 'SELECT ?' => 0.000399s / 7 = 0.000057s avg (first 0.000177s, min 0.000002s, max 0.000177s) 2010 10 17
  • 18. DBIx::ProfileManager • handle attibute use DBI; use DBIx::ProfileManager; my $dbh = DBI->connect(...); my $pm = DBIx::ProfileManager->new; $pm->profile_start; my $res = $dbh->selectall_arrayref(...); $pm->profile_stop; my @results = $pm->data_formatted; local $, = "n"; print @results; 2010 10 17
  • 19. DBIx::ProfileManager • profile_start profile_stop • data_formatted format # sample $pm->data_formatted( q|%{statement} : %{max}, %{min}, %{avg}| ); • DeNA • http://engineer.dena.jp/2010/03/dbixprofilemanager-sql-profiling.html 2010 10 17
  • 20. Catalyst # MyApp.pm use DBIx::ProfileManager; sub prepare_request { my ( $c, $args ) = @_; my $pm = DBIx::ProfileManager->new(%config); $pm->profile_start; $c->stash->{__dbix_profilemanager} = $pm; } sub finalize { my ( $c, $args ) = @_; my $pm = $c->stash->{__dbix_priflemanager}; $pm->profile_stop; # $pm->data_formatted } 2010 10 17
  • 21. DB • slowlog mk-query-digest # Query 8: 44.67 QPS, 0.13x concurrency, ID 0x6516D7E6698E425A at byte 108467522 # Attribute pct total min max avg 95% stddev median # ========= ====== ======= ======= ======= ======= ======= ======= ======= # Count 2 317 # Exec time 2 944ms 0 205ms 3ms 2ms 22ms 108us # Hosts 181 10.5.9.20 (7/2%), 10.5.10.157 (6/1%)... 179 more # Databases 1 platform # Time range 2010-10-12 13:21:53.218711 to 2010-10-12 13:22:00.315719 # bytes 1 20.43k 66 68 66.01 65.89 0 65.89 # Errors 1 none # Rows affe 0 0 0 0 0 0 0 0 # Warning c 0 0 0 0 0 0 0 0 # Query_time distribution # 1us # 10us #################################################### # 100us ################################################################ # 1ms ######### # 10ms # # 100ms # # 1s # 10s+ # Tables # SHOW TABLE STATUS FROM `db` LIKE 'entry'G # SHOW CREATE TABLE `db`.`entry`G # EXPLAIN select id, type from entry where id = xxx G 2010 10 17
  • 22. DB • # Query_time distribution # 1us # 10us #################################################### # 100us ###################################################### # 1ms ######### # 10ms # # 100ms # # 1s # 10s+ • • SQL explain 2010 10 17
  • 23. • • ↓ mk-query-digest tcpdump !! mysql dump OK 2010 10 17
  • 24. DB • • • • • • 2010 10 17
  • 25. DB • • $mysqladmin -uroot -p extended-STATUS | egrep '(Max|Threads_)' | Max_used_connections | 68 | | Threads_cached | 36 | | Threads_connected | 32 | | Threads_created | 68 | | Threads_running |5 | 2010 10 17
  • 26. DB • • $ mysqladmin -uroot -p -hdbsrv status | awk '{print $22}' 9780.895 2010 10 17
  • 27. DB • • $ sar 13:00:01 CPU %user %nice %system %iowait %idle 13:10:01 all 0.97 0.00 0.32 0.36 98.35 13:20:01 all 0.80 0.00 0.30 0.25 98.65 13:30:01 all 0.81 0.00 0.29 0.28 98.62 13:40:01 all 0.73 0.00 0.28 0.24 98.76 2010 10 17
  • 28. ex. open Platform • • • • • 2010 10 17
  • 29. • from tcpdump & GadgetServer timeout • 100 200ms • ex. 2010 10 17
  • 30. • ping, traceroute etc • • 10ms ( ) • EC2 100ms 200ms 2010 10 17
  • 31. • platform <-> • <-> (Web <-> DB) • VM • I/O • 2010 10 17
  • 32. • ex. Platform @mbga OpenPlatform • TCO 2010 10 17
  • 33. • • DB • • • 2010 10 17
  • 34. 2010 10 17
  • 35. Thanks! 2010 10 17