SlideShare a Scribd company logo
Visualizing ORACLE performance
with R
Maxym Kharchenko
Gluent.com
Whoami
■ Started as a database kernel developer
■ Then: ORACLE DBA for 15+ years
■ Now: Developer at Gluent (past: amazon.com)
■ OCM, ORACLE Ace Associate, AWS Certified Developer
■ Blog: http://intermediatesql.com
■ Twitter: @maxymkh
The cool things that we do at Gluent
Gluent
Oracle
Teradata
NoSQL
Big Data
Sources
MSSQL
App
X
App
Y
App
Z
We glue these
worlds together!
The cool things that we do at Gluent
Agenda
■ Why visualize with R
■ How to visualize with R
■ Pretty pictures !
■ Interesting use cases (more pretty pictures!)
■ Labs! Labs! Labs!
Why visualize ?
Why visualize ?
[1] 10.06 10.07 9.99 9.95 10.56 9.82 10.06 9.97 9.97 9.91
[11] 9.99 10.68 10.04 10.05 9.92 10.08 9.91 9.97 10.11 10.03
[21] 10.08 10.22 8.84 10.42 8.68 10.14 9.46 9.69 11.56 9.55
[31] 10.32 8.77 10.20 10.16 10.03 10.05 10.47 9.83 10.18 10.00
[41] 10.11 9.76 9.89 10.09 10.09 10.15 9.86 10.06 10.56 9.87
[51] 9.95 10.19 10.01 10.04 10.93 11.03 11.07 11.08 11.21 10.77
[61] 11.01 10.87 11.06 11.16 10.94 9.82 10.09 10.16 10.05 9.87
[71] 10.01 9.92 9.90 10.23 10.14 10.09 10.08 9.92 10.05 10.60
[81] 10.06 10.10 9.97 10.25 10.10 10.19 10.07 9.97 10.05 10.08
[91] 9.90 10.41 10.19 9.96 9.90 10.07 9.95 10.22 9.94 9.93
Why visualize ?
DBA 2.0: EM – Pretty
DBA 2.0: EM – Pretty … but not flexible
DBA 1.0: sqlplus – Flexible
SQL*Plus: Release 11.2.0.2.0 Production on Fri Feb 14
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0
With the Partitioning and Real Application Testing options
SQL> @event_histograms db%file%sequential
DBA 1.0: sqlplus – Flexible … but not pretty
EVENT Ms PCT GRAPH
----------------------- ---- ------- --------------------
db file sequential read 1 18.43 ########
2 4.09 #
4 23.52 ##########
8 43.04 ####################
16 10.05 ####
32 .72
64 .06
128 .09
256 .01
DBA 1.0: sqlplus – Flexible … but not pretty
EVENT Ms PCT GRAPH
----------------------- ---- ------- --------------------
db file sequential read 1 18.43 ********
2 4.09 *
4 23.52 **********
8 43.04 ********************
16 10.05 ****
32 .72
64 .06
128 .09
256 .01
Ok, sqlplus CAN be pretty
Tanel Poder’s fish.sql
Need a tool: both pretty AND flexible
DBA 1.5: Enter R
How to visualize data with R
http://www.r-project.org/
What R looks like
What R looks like
If you know how to program in
Perl/Python/Ruby etc
You know how to program in
R
#***********************************************************
# Prepare exploration: Define categories, set plot type etc
#***********************************************************
prepare_exploration <- function(
fill=NULL, y="N", x="TS", pct=FALSE,
to_ts=c("TS"), top_n=8, drop_others=FALSE, data=d
) {
if(is.null(fill)) {
data$CAT <- 1
} else {
data <- add_cat_top_n(fill, y, x, top_n,
drop_others, data)
if (pct) {
data <- add_pct(y, x, data)
}
}
data <- to_ts(to_ts, data)
return(data)
}
R: Appearances are important
A = B + C
A <- B + C
R: Everything is a VECTOR
A + B
Result:
[1] 4 6 8 10 12 14 16 18 20 22
R visualization workflow
Get data
into R
Transform Visualize
Get data into R
CSV, TXT:
d <- read.csv('http://…/file.csv')
ROracle, RJDBC:
odrv <- dbDriver("Oracle")
conn <- dbConnect(odrv, user, passwd, tns)
d <- dbGetQuery(conn, sql, binds)
Data in R - a “data frame”
Transform
If you know SQL
You know how to
transform data in R
Transform
d1 <- sqldf("
SELECT event, count(1) as n
FROM d
GROUP BY event
ORDER BY n DESC LIMIT 10
")
Visualize
ggplot(d, aes) + geom
+ “other stuff”
AES: Mapping data
Time Execs
10:15 100
10:20 150
10:25 180
10:30 120
10:35 220
aes(x=Time, y=Execs)
AES: Mapping data
Time Execs Type
10:15 90 READ
10:15 10 WRITE
10:20 120 READ
10:20 30 WRITE
10:25 100 READ
10:25 80 WRITE
10:30 20 READ
10:30 100 WRITE
10:35 120 READ
10:35 100 WRITE
aes(x=Time, y=Execs,
color=Type)
Geoms
Time Execs Type
10:15 90 READ
10:15 10 WRITE
10:20 120 READ
10:20 30 WRITE
10:25 100 READ
10:25 80 WRITE
10:30 20 READ
10:30 100 WRITE
10:35 120 READ
10:35 100 WRITE
aes(x=Time, y=Execs,
fill=Type)
+ geom_bar()
Geoms
Time Execs Type
10:15 90 READ
10:15 10 WRITE
10:20 120 READ
10:20 30 WRITE
10:25 100 READ
10:25 80 WRITE
10:30 20 READ
10:30 100 WRITE
10:35 120 READ
10:35 100 WRITE
aes(x=Time, y=Execs,
color=Type)
+ geom_point()
Geoms
Time Execs Type
10:15 90 READ
10:15 10 WRITE
10:20 120 READ
10:20 30 WRITE
10:25 100 READ
10:25 80 WRITE
10:30 20 READ
10:30 100 WRITE
10:35 120 READ
10:35 100 WRITE
aes(x=Time, y=Execs,
color=Type, size=Execs)
+ geom_point()
Putting it all together
R> connect('db1')
R> exec('get_ash.sql',start_time='2016-02-01')
R> n_exec('db1, db2, db3', 'get_ash.sql',
start_time='2016-02-01')
R> d1 <- sqldf('select … from … where …')
R> explore_bar(fill='EVENT')
R> explore_area(fill='BLOCKING_SESSION')
R> explore_point(x='PARSES', y='EXECS',
color='MODULE', top=8)
Picture time !
Time series plots: v$active_session_history
Time series plots: v$active_session_history
Time series plots: dba_hist_seg_stat
Time series plots: dba_hist_seg_stat
Time series plots – ARC heat map
Not just for database metrics
■ cat listener.log | grep CONNECT_DATA | 
perl -pale 's/^(S+ S+).*(PROGRAM=(.*?)).*$/$1 $2/'
>/tmp/s.txt
Summarized data: (sampled) v$sql
v$sql.elapsed_time
Summarized data: dba_hist_sqlstat
Scatter plots: dba_hist_sqlstat
Block flowers:
dba_hist_active_sess_history
A few interesting cases
ORA-00020: Max # of processes exceeded
When was the database really “down” ?
Logon trigger: Rejected connections
What was the exact effect on the system ?
ASH.in_connection_mgmt=‘Y’
Rolling partitions:
Can we archive data older than 30 days ?
dba_hist_seg_stat.
db_block_changes_delta
dba_hist_seg_stat.
logical_reads_delta
Query latency:
Can we trust the “average” elapsed time ?
Query latency:
Can we trust the “average” elapsed time ?
Query latency:
Can we trust the “average” elapsed time ?
Takeaways
■ R is a sqlplus with graphics
■ If you know how to script, R is easy to master
■ Did I mention that R is free ?

More Related Content

PPTX
2015 555 kharchenko_ppt
PPTX
Commit2015 kharchenko - python generators - ext
PDF
Programming with Python and PostgreSQL
PDF
MySQL in Go - Golang NE July 2015
PDF
Python postgre sql a wonderful wedding
PDF
并发模型介绍
PPTX
Parse, scale to millions
PDF
"PostgreSQL and Python" Lightning Talk @EuroPython2014
2015 555 kharchenko_ppt
Commit2015 kharchenko - python generators - ext
Programming with Python and PostgreSQL
MySQL in Go - Golang NE July 2015
Python postgre sql a wonderful wedding
并发模型介绍
Parse, scale to millions
"PostgreSQL and Python" Lightning Talk @EuroPython2014

What's hot (20)

PDF
When RegEx is not enough
PPTX
Value protocols and codables
PPTX
Naughty And Nice Bash Features
PPTX
All you need to know about the JavaScript event loop
PPT
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
PDF
Go database/sql
PDF
JavaScript - new features in ECMAScript 6
PDF
EcmaScript 6 - The future is here
PDF
ES2015 (ES6) Overview
PPTX
Introduction to Ecmascript - ES6
PPTX
Modern JS with ES6
PPTX
CouchDB Day NYC 2017: Full Text Search
PDF
Javascript development done right
PDF
Javascript ES6 generators
PDF
Python RESTful webservices with Python: Flask and Django solutions
PDF
Go memory
PDF
node ffi
PPTX
10 tips for making Bash a sane programming language
PDF
Cross Domain Web
Mashups with JQuery and Google App Engine
PDF
PuppetDB, Puppet Explorer and puppetdbquery
When RegEx is not enough
Value protocols and codables
Naughty And Nice Bash Features
All you need to know about the JavaScript event loop
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
Go database/sql
JavaScript - new features in ECMAScript 6
EcmaScript 6 - The future is here
ES2015 (ES6) Overview
Introduction to Ecmascript - ES6
Modern JS with ES6
CouchDB Day NYC 2017: Full Text Search
Javascript development done right
Javascript ES6 generators
Python RESTful webservices with Python: Flask and Django solutions
Go memory
node ffi
10 tips for making Bash a sane programming language
Cross Domain Web
Mashups with JQuery and Google App Engine
PuppetDB, Puppet Explorer and puppetdbquery
Ad

Similar to Visualizing ORACLE performance data with R @ #C16LV (20)

PDF
ASHviz - Dats visualization research experiments using ASH data
PDF
Overview of running R in the Oracle Database
PPTX
R training at Aimia
PDF
Introduction to Data Mining with R and Data Import/Export in R
PPTX
Data Analytics: Understanding Your MongoDB Data
PPTX
Example R usage for oracle DBA UKOUG 2013
PPTX
Get up to Speed (Quick Guide to data.table in R and Pentaho PDI)
PDF
Oracle Advanced Analytics
PDF
ITI015En-The evolution of databases (I)
PDF
An R primer for SQL folks
PDF
Data visualization
PPTX
Overview data analyis and visualisation tools 2020
PPTX
1 introduction
PPTX
Mis chapter 7 database systems
PDF
Hailey_Database_Performance_Made_Easy_through_Graphics.pdf
PPTX
How to Empower Your Business Users with Oracle Data Visualization
PPTX
Big Data & Oracle Technologies
PDF
Introduction to Data Analtics with Pandas [PyCon Cz]
PPTX
DBA Commands and Concepts That Every Developer Should Know - Part 2
PPTX
DBA Commands and Concepts That Every Developer Should Know - Part 2
ASHviz - Dats visualization research experiments using ASH data
Overview of running R in the Oracle Database
R training at Aimia
Introduction to Data Mining with R and Data Import/Export in R
Data Analytics: Understanding Your MongoDB Data
Example R usage for oracle DBA UKOUG 2013
Get up to Speed (Quick Guide to data.table in R and Pentaho PDI)
Oracle Advanced Analytics
ITI015En-The evolution of databases (I)
An R primer for SQL folks
Data visualization
Overview data analyis and visualisation tools 2020
1 introduction
Mis chapter 7 database systems
Hailey_Database_Performance_Made_Easy_through_Graphics.pdf
How to Empower Your Business Users with Oracle Data Visualization
Big Data & Oracle Technologies
Introduction to Data Analtics with Pandas [PyCon Cz]
DBA Commands and Concepts That Every Developer Should Know - Part 2
DBA Commands and Concepts That Every Developer Should Know - Part 2
Ad

Recently uploaded (20)

PDF
Approach and Philosophy of On baking technology
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Spectroscopy.pptx food analysis technology
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Big Data Technologies - Introduction.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Electronic commerce courselecture one. Pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
A Presentation on Artificial Intelligence
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Machine learning based COVID-19 study performance prediction
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Approach and Philosophy of On baking technology
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Spectroscopy.pptx food analysis technology
The AUB Centre for AI in Media Proposal.docx
Big Data Technologies - Introduction.pptx
sap open course for s4hana steps from ECC to s4
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Electronic commerce courselecture one. Pdf
Chapter 3 Spatial Domain Image Processing.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Advanced methodologies resolving dimensionality complications for autism neur...
A Presentation on Artificial Intelligence
Diabetes mellitus diagnosis method based random forest with bat algorithm
Unlocking AI with Model Context Protocol (MCP)
Machine learning based COVID-19 study performance prediction
Dropbox Q2 2025 Financial Results & Investor Presentation
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf

Visualizing ORACLE performance data with R @ #C16LV

  • 1. Visualizing ORACLE performance with R Maxym Kharchenko Gluent.com
  • 2. Whoami ■ Started as a database kernel developer ■ Then: ORACLE DBA for 15+ years ■ Now: Developer at Gluent (past: amazon.com) ■ OCM, ORACLE Ace Associate, AWS Certified Developer ■ Blog: http://intermediatesql.com ■ Twitter: @maxymkh
  • 3. The cool things that we do at Gluent Gluent Oracle Teradata NoSQL Big Data Sources MSSQL App X App Y App Z We glue these worlds together!
  • 4. The cool things that we do at Gluent
  • 5. Agenda ■ Why visualize with R ■ How to visualize with R ■ Pretty pictures ! ■ Interesting use cases (more pretty pictures!) ■ Labs! Labs! Labs!
  • 7. Why visualize ? [1] 10.06 10.07 9.99 9.95 10.56 9.82 10.06 9.97 9.97 9.91 [11] 9.99 10.68 10.04 10.05 9.92 10.08 9.91 9.97 10.11 10.03 [21] 10.08 10.22 8.84 10.42 8.68 10.14 9.46 9.69 11.56 9.55 [31] 10.32 8.77 10.20 10.16 10.03 10.05 10.47 9.83 10.18 10.00 [41] 10.11 9.76 9.89 10.09 10.09 10.15 9.86 10.06 10.56 9.87 [51] 9.95 10.19 10.01 10.04 10.93 11.03 11.07 11.08 11.21 10.77 [61] 11.01 10.87 11.06 11.16 10.94 9.82 10.09 10.16 10.05 9.87 [71] 10.01 9.92 9.90 10.23 10.14 10.09 10.08 9.92 10.05 10.60 [81] 10.06 10.10 9.97 10.25 10.10 10.19 10.07 9.97 10.05 10.08 [91] 9.90 10.41 10.19 9.96 9.90 10.07 9.95 10.22 9.94 9.93
  • 9. DBA 2.0: EM – Pretty
  • 10. DBA 2.0: EM – Pretty … but not flexible
  • 11. DBA 1.0: sqlplus – Flexible SQL*Plus: Release 11.2.0.2.0 Production on Fri Feb 14 Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 With the Partitioning and Real Application Testing options SQL> @event_histograms db%file%sequential
  • 12. DBA 1.0: sqlplus – Flexible … but not pretty EVENT Ms PCT GRAPH ----------------------- ---- ------- -------------------- db file sequential read 1 18.43 ######## 2 4.09 # 4 23.52 ########## 8 43.04 #################### 16 10.05 #### 32 .72 64 .06 128 .09 256 .01
  • 13. DBA 1.0: sqlplus – Flexible … but not pretty EVENT Ms PCT GRAPH ----------------------- ---- ------- -------------------- db file sequential read 1 18.43 ******** 2 4.09 * 4 23.52 ********** 8 43.04 ******************** 16 10.05 **** 32 .72 64 .06 128 .09 256 .01
  • 14. Ok, sqlplus CAN be pretty Tanel Poder’s fish.sql
  • 15. Need a tool: both pretty AND flexible
  • 17. How to visualize data with R
  • 19. What R looks like
  • 20. If you know how to program in Perl/Python/Ruby etc You know how to program in R
  • 21. #*********************************************************** # Prepare exploration: Define categories, set plot type etc #*********************************************************** prepare_exploration <- function( fill=NULL, y="N", x="TS", pct=FALSE, to_ts=c("TS"), top_n=8, drop_others=FALSE, data=d ) { if(is.null(fill)) { data$CAT <- 1 } else { data <- add_cat_top_n(fill, y, x, top_n, drop_others, data) if (pct) { data <- add_pct(y, x, data) } } data <- to_ts(to_ts, data) return(data) }
  • 22. R: Appearances are important A = B + C A <- B + C
  • 23. R: Everything is a VECTOR A + B Result: [1] 4 6 8 10 12 14 16 18 20 22
  • 24. R visualization workflow Get data into R Transform Visualize
  • 25. Get data into R CSV, TXT: d <- read.csv('http://…/file.csv') ROracle, RJDBC: odrv <- dbDriver("Oracle") conn <- dbConnect(odrv, user, passwd, tns) d <- dbGetQuery(conn, sql, binds)
  • 26. Data in R - a “data frame”
  • 27. Transform If you know SQL You know how to transform data in R
  • 28. Transform d1 <- sqldf(" SELECT event, count(1) as n FROM d GROUP BY event ORDER BY n DESC LIMIT 10 ")
  • 29. Visualize ggplot(d, aes) + geom + “other stuff”
  • 30. AES: Mapping data Time Execs 10:15 100 10:20 150 10:25 180 10:30 120 10:35 220 aes(x=Time, y=Execs)
  • 31. AES: Mapping data Time Execs Type 10:15 90 READ 10:15 10 WRITE 10:20 120 READ 10:20 30 WRITE 10:25 100 READ 10:25 80 WRITE 10:30 20 READ 10:30 100 WRITE 10:35 120 READ 10:35 100 WRITE aes(x=Time, y=Execs, color=Type)
  • 32. Geoms Time Execs Type 10:15 90 READ 10:15 10 WRITE 10:20 120 READ 10:20 30 WRITE 10:25 100 READ 10:25 80 WRITE 10:30 20 READ 10:30 100 WRITE 10:35 120 READ 10:35 100 WRITE aes(x=Time, y=Execs, fill=Type) + geom_bar()
  • 33. Geoms Time Execs Type 10:15 90 READ 10:15 10 WRITE 10:20 120 READ 10:20 30 WRITE 10:25 100 READ 10:25 80 WRITE 10:30 20 READ 10:30 100 WRITE 10:35 120 READ 10:35 100 WRITE aes(x=Time, y=Execs, color=Type) + geom_point()
  • 34. Geoms Time Execs Type 10:15 90 READ 10:15 10 WRITE 10:20 120 READ 10:20 30 WRITE 10:25 100 READ 10:25 80 WRITE 10:30 20 READ 10:30 100 WRITE 10:35 120 READ 10:35 100 WRITE aes(x=Time, y=Execs, color=Type, size=Execs) + geom_point()
  • 35. Putting it all together R> connect('db1') R> exec('get_ash.sql',start_time='2016-02-01') R> n_exec('db1, db2, db3', 'get_ash.sql', start_time='2016-02-01') R> d1 <- sqldf('select … from … where …') R> explore_bar(fill='EVENT') R> explore_area(fill='BLOCKING_SESSION') R> explore_point(x='PARSES', y='EXECS', color='MODULE', top=8)
  • 37. Time series plots: v$active_session_history
  • 38. Time series plots: v$active_session_history
  • 39. Time series plots: dba_hist_seg_stat
  • 40. Time series plots: dba_hist_seg_stat
  • 41. Time series plots – ARC heat map
  • 42. Not just for database metrics ■ cat listener.log | grep CONNECT_DATA | perl -pale 's/^(S+ S+).*(PROGRAM=(.*?)).*$/$1 $2/' >/tmp/s.txt
  • 43. Summarized data: (sampled) v$sql v$sql.elapsed_time
  • 48. ORA-00020: Max # of processes exceeded When was the database really “down” ?
  • 49. Logon trigger: Rejected connections What was the exact effect on the system ? ASH.in_connection_mgmt=‘Y’
  • 50. Rolling partitions: Can we archive data older than 30 days ? dba_hist_seg_stat. db_block_changes_delta dba_hist_seg_stat. logical_reads_delta
  • 51. Query latency: Can we trust the “average” elapsed time ?
  • 52. Query latency: Can we trust the “average” elapsed time ?
  • 53. Query latency: Can we trust the “average” elapsed time ?
  • 54. Takeaways ■ R is a sqlplus with graphics ■ If you know how to script, R is easy to master ■ Did I mention that R is free ?