SlideShare a Scribd company logo
PL/SQL
Best Practıces
Emrah METE
Senior ETL Developer
Board Member of TROUG
Emrah METE
- Yıldız Teknik Üniversitesi – Bilgisayar Mühendisliği
- İş Deneyimi
- Software Developement Specialist @Turkcell Teknoloji
- Senior BI Consultant @i2i-Systems
- Senior BI Specialist @HititCs
- Senior ETL Developer @Turkcell Teknoloji
- Teknik Uzmanlık
- 5+ Oracle SQL, Oracle PL/SQL, ETL, DWH, BI
- Kurucu Üye ve Yönetim Kurulu Üyesi @TROUG
- Moderatör @OracleTurk
- Blogger
- https://emrahmete.wordpress.com/ (Türkçe)
- https://emrahmeteen.wordpress.com/ (İngilizce)
- Oracle Certified SQL Expert
- Oracle Database Developer Choice Awards 2015, SQL Category Winner!!!
- Oracle ACE
https://emrahmete.wordpress.com/about/
1
Don't
Hard Codıng
VARCHAR2(N) Declaration
Business Rules and Formulas
SQL STATEMENTS
APPLICATION
T1
T2
T3
T4
DML
DML
OPTIMIZE MAINTAIN DEBUG
SOLUTION: SQL AS A SERVICE
APPLICATION
DATA LAYER
T3 T3 T3 T3 T3
APPLICATION
DATA LAYER
T3
OPTIMIZE MAINTAIN DEBUG WRITE CODE
FASTER
Fix Bugs
Faster
REUSED
CODE
SOLUTION: SQL AS A SERVICE
2
Don’t
row by row
processıng
ROW BY ROW PROCESSING
HOW IT WORKS
SOLUTION: BULK PROCESSING
SOLUTION: BULK PROCESSING
SOLUTION: BULK PROCESSING : HOW IT WORKS
BULK COLLECT LIMITATIONS
BULK PROCESSING
DATASET 1
ARRAY
TRANSFORMATION
TABLE
BULK COLLECT FORALL
3
memory management
- PACKAGE LEVEL PARAMETERS
- BULK COLLECT WITH LIMIT CLAUSE
- BULK COLLECT WITH VARRAYS
- USING PARALLEL PIPELINED FUNCTIONS
- USING NOCOPY HINT
MEMORY MANAGEMENT
USING NOCOPY
- IN => pass by reference
- OUT, IN OUT => default pass by value
- NOCOPY => pass by reference
+ Memory Consumption
+ Improve Performance
- Do not trust (in Exception State)
4
Data cachıng
- Great technique for improving application performance
- SGA is an huge and sophisticted for the database instance.
- Also We have three other caches that we can use in PL/SQL code
- Deterministic Functions
- PGA Caching
- Function Result Cache
DATA CACHING
- PL/SQL Functions declared as Deterministic
- Caching using PGA
- Used most effectively with collections
- Accessing PGA more efficient than SGA
- Function Result Cache (Oracle DB 11g)
DATA CACHING
FUNCTION RESULT CACHE
DETERMINISTIC
LiveSQL!!!
https://livesql.oracle.com
REFERENCES
- Oracle PL/SQL Best Practices
- Oracle PL/SQL Programming
- http://www.oracle.com/technetwork/issue-archive/2010/10-sep/o57plsql-088600.html
- http://orasql.org/category/oracle/deterministic-functions/
- Practically Perfect PL/SQL with Steven Feuerstein
- https://www.youtube.com/watch?v=0PSrI7iT1AQ
- https://www.youtube.com/watch?v=8NoOATGP9v8
- https://www.youtube.com/watch?v=VBkRTXz5pug
- https://www.youtube.com/watch?v=D7H1VKMiqj8
- https://www.youtube.com/watch?v=lxLTXcY3e80
- https://www.youtube.com/watch?v=EoyRxPxU26U
thanks!
Any questions?
@emrahmete (twitter)
emrahmete@gmail.com
https://emrahmete.wordpress.com

More Related Content

What's hot

1 - Introduction to PL/SQL
1 - Introduction to PL/SQL1 - Introduction to PL/SQL
1 - Introduction to PL/SQL
rehaniltifat
 
07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development
rehaniltifat
 
New Stuff in the Oracle PL/SQL Language
New Stuff in the Oracle PL/SQL LanguageNew Stuff in the Oracle PL/SQL Language
New Stuff in the Oracle PL/SQL Language
Steven Feuerstein
 
Oracle performance tuning online training
Oracle performance tuning online training Oracle performance tuning online training
Oracle performance tuning online training
Anand - Technical Freelance Online Training Expert & SME
 
01 oracle architecture
01 oracle architecture01 oracle architecture
01 oracle architecture
Smitha Padmanabhan
 
ORACLE PL SQL
ORACLE PL SQLORACLE PL SQL
ORACLE PL SQL
Srinath Maharana
 
PL/SQL CURSORES
PL/SQL CURSORESPL/SQL CURSORES
PL/SQL CONDICIONALES Y CICLOS
PL/SQL CONDICIONALES Y CICLOSPL/SQL CONDICIONALES Y CICLOS
PL/SQL CONDICIONALES Y CICLOS
Richard Eliseo Mendoza Gafaro
 
Less07 schema
Less07 schemaLess07 schema
Less07 schemaImran Ali
 
Oracle SQL Tuning for Day-to-Day Data Warehouse Support
Oracle SQL Tuning for Day-to-Day Data Warehouse SupportOracle SQL Tuning for Day-to-Day Data Warehouse Support
Oracle SQL Tuning for Day-to-Day Data Warehouse Support
nkarag
 
PL-SQL, Cursors & Triggers
PL-SQL, Cursors & TriggersPL-SQL, Cursors & Triggers
PL-SQL, Cursors & Triggers
Shalabh Chaudhary
 
Web application penetration using SQLMAP.
Web application penetration using SQLMAP.Web application penetration using SQLMAP.
Web application penetration using SQLMAP.
asmitaanpat
 
20180929 jssug 10_a5_sql_mk2
20180929 jssug 10_a5_sql_mk220180929 jssug 10_a5_sql_mk2
20180929 jssug 10_a5_sql_mk2
Kunihisa Abukawa
 
Advanced sql injection 1
Advanced sql injection 1Advanced sql injection 1
Advanced sql injection 1
Karunakar Singh Thakur
 
SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...
SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...
SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...
SemaRule
 
06 Using More Package Concepts
06 Using More Package Concepts06 Using More Package Concepts
06 Using More Package Concepts
rehaniltifat
 

What's hot (20)

1 - Introduction to PL/SQL
1 - Introduction to PL/SQL1 - Introduction to PL/SQL
1 - Introduction to PL/SQL
 
07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development
 
PL/SQL 3 DML
PL/SQL 3 DMLPL/SQL 3 DML
PL/SQL 3 DML
 
New Stuff in the Oracle PL/SQL Language
New Stuff in the Oracle PL/SQL LanguageNew Stuff in the Oracle PL/SQL Language
New Stuff in the Oracle PL/SQL Language
 
Oracle performance tuning online training
Oracle performance tuning online training Oracle performance tuning online training
Oracle performance tuning online training
 
01 oracle architecture
01 oracle architecture01 oracle architecture
01 oracle architecture
 
ORACLE PL SQL
ORACLE PL SQLORACLE PL SQL
ORACLE PL SQL
 
PL/SQL CURSORES
PL/SQL CURSORESPL/SQL CURSORES
PL/SQL CURSORES
 
PL/SQL CONDICIONALES Y CICLOS
PL/SQL CONDICIONALES Y CICLOSPL/SQL CONDICIONALES Y CICLOS
PL/SQL CONDICIONALES Y CICLOS
 
3 sql overview
3 sql overview3 sql overview
3 sql overview
 
Stored procedures
Stored proceduresStored procedures
Stored procedures
 
Less07 schema
Less07 schemaLess07 schema
Less07 schema
 
Oracle SQL Tuning for Day-to-Day Data Warehouse Support
Oracle SQL Tuning for Day-to-Day Data Warehouse SupportOracle SQL Tuning for Day-to-Day Data Warehouse Support
Oracle SQL Tuning for Day-to-Day Data Warehouse Support
 
Les01
Les01Les01
Les01
 
PL-SQL, Cursors & Triggers
PL-SQL, Cursors & TriggersPL-SQL, Cursors & Triggers
PL-SQL, Cursors & Triggers
 
Web application penetration using SQLMAP.
Web application penetration using SQLMAP.Web application penetration using SQLMAP.
Web application penetration using SQLMAP.
 
20180929 jssug 10_a5_sql_mk2
20180929 jssug 10_a5_sql_mk220180929 jssug 10_a5_sql_mk2
20180929 jssug 10_a5_sql_mk2
 
Advanced sql injection 1
Advanced sql injection 1Advanced sql injection 1
Advanced sql injection 1
 
SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...
SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...
SemaRule Navigator: An Open-Source Framework for Semantic and Text Analysis A...
 
06 Using More Package Concepts
06 Using More Package Concepts06 Using More Package Concepts
06 Using More Package Concepts
 

Viewers also liked

Oracle'da Transaction Yönetimi
Oracle'da Transaction YönetimiOracle'da Transaction Yönetimi
Oracle'da Transaction Yönetimi
Emrah METE
 
Emrah METE - Oracle Cloud Day 2015 12c SQL New Features
Emrah METE - Oracle Cloud Day 2015 12c SQL New Features Emrah METE - Oracle Cloud Day 2015 12c SQL New Features
Emrah METE - Oracle Cloud Day 2015 12c SQL New Features
Emrah METE
 
Oracle formstutorial
Oracle formstutorialOracle formstutorial
Oracle formstutorial
phamdanhvu
 
Xenogenetics for PL/SQL - infusing with Java best practices
Xenogenetics for PL/SQL - infusing with Java best practicesXenogenetics for PL/SQL - infusing with Java best practices
Xenogenetics for PL/SQL - infusing with Java best practices
Lucas Jellema
 
Not Your Father's Database by Databricks
Not Your Father's Database by DatabricksNot Your Father's Database by Databricks
Not Your Father's Database by Databricks
Caserta
 
Designing High Performance ETL for Data Warehouse
Designing High Performance ETL for Data WarehouseDesigning High Performance ETL for Data Warehouse
Designing High Performance ETL for Data WarehouseMarcel Franke
 
Oracle forms developer 10g vol1
Oracle forms developer 10g vol1Oracle forms developer 10g vol1
Oracle forms developer 10g vol1abdull466
 
DGIQ 2015 The Fundamentals of Data Quality
DGIQ 2015 The Fundamentals of Data QualityDGIQ 2015 The Fundamentals of Data Quality
DGIQ 2015 The Fundamentals of Data Quality
Caserta
 
Intro to Data Science on Hadoop
Intro to Data Science on HadoopIntro to Data Science on Hadoop
Intro to Data Science on Hadoop
Caserta
 
Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)
magupta26
 
Oracle apps 11i tutorial(v2)
Oracle apps 11i tutorial(v2)Oracle apps 11i tutorial(v2)
Oracle apps 11i tutorial(v2)
vk91188
 
Agile data warehouse
Agile data warehouseAgile data warehouse
Agile data warehouseDao Vo
 
Building a New Platform for Customer Analytics
Building a New Platform for Customer Analytics Building a New Platform for Customer Analytics
Building a New Platform for Customer Analytics
Caserta
 
Big Data Analytics on the Cloud
Big Data Analytics on the CloudBig Data Analytics on the Cloud
Big Data Analytics on the Cloud
Caserta
 
ORACLE PL SQL FOR BEGINNERS
ORACLE PL SQL FOR BEGINNERSORACLE PL SQL FOR BEGINNERS
ORACLE PL SQL FOR BEGINNERS
mohdoracle
 
Agile Data Warehouse Design for Big Data Presentation
Agile Data Warehouse Design for Big Data PresentationAgile Data Warehouse Design for Big Data Presentation
Agile Data Warehouse Design for Big Data Presentation
Vishal Kumar
 

Viewers also liked (17)

Oracle'da Transaction Yönetimi
Oracle'da Transaction YönetimiOracle'da Transaction Yönetimi
Oracle'da Transaction Yönetimi
 
Emrah METE - Oracle Cloud Day 2015 12c SQL New Features
Emrah METE - Oracle Cloud Day 2015 12c SQL New Features Emrah METE - Oracle Cloud Day 2015 12c SQL New Features
Emrah METE - Oracle Cloud Day 2015 12c SQL New Features
 
oracle-forms
oracle-formsoracle-forms
oracle-forms
 
Oracle formstutorial
Oracle formstutorialOracle formstutorial
Oracle formstutorial
 
Xenogenetics for PL/SQL - infusing with Java best practices
Xenogenetics for PL/SQL - infusing with Java best practicesXenogenetics for PL/SQL - infusing with Java best practices
Xenogenetics for PL/SQL - infusing with Java best practices
 
Not Your Father's Database by Databricks
Not Your Father's Database by DatabricksNot Your Father's Database by Databricks
Not Your Father's Database by Databricks
 
Designing High Performance ETL for Data Warehouse
Designing High Performance ETL for Data WarehouseDesigning High Performance ETL for Data Warehouse
Designing High Performance ETL for Data Warehouse
 
Oracle forms developer 10g vol1
Oracle forms developer 10g vol1Oracle forms developer 10g vol1
Oracle forms developer 10g vol1
 
DGIQ 2015 The Fundamentals of Data Quality
DGIQ 2015 The Fundamentals of Data QualityDGIQ 2015 The Fundamentals of Data Quality
DGIQ 2015 The Fundamentals of Data Quality
 
Intro to Data Science on Hadoop
Intro to Data Science on HadoopIntro to Data Science on Hadoop
Intro to Data Science on Hadoop
 
Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)
 
Oracle apps 11i tutorial(v2)
Oracle apps 11i tutorial(v2)Oracle apps 11i tutorial(v2)
Oracle apps 11i tutorial(v2)
 
Agile data warehouse
Agile data warehouseAgile data warehouse
Agile data warehouse
 
Building a New Platform for Customer Analytics
Building a New Platform for Customer Analytics Building a New Platform for Customer Analytics
Building a New Platform for Customer Analytics
 
Big Data Analytics on the Cloud
Big Data Analytics on the CloudBig Data Analytics on the Cloud
Big Data Analytics on the Cloud
 
ORACLE PL SQL FOR BEGINNERS
ORACLE PL SQL FOR BEGINNERSORACLE PL SQL FOR BEGINNERS
ORACLE PL SQL FOR BEGINNERS
 
Agile Data Warehouse Design for Big Data Presentation
Agile Data Warehouse Design for Big Data PresentationAgile Data Warehouse Design for Big Data Presentation
Agile Data Warehouse Design for Big Data Presentation
 

Similar to Oracle PL/SQL Best Practices

The Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result CacheThe Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result Cache
Steven Feuerstein
 
Developer day v2
Developer day v2Developer day v2
Developer day v2
AiougVizagChapter
 
Dipankar resume 2.0 (1)
Dipankar resume 2.0 (1)Dipankar resume 2.0 (1)
Dipankar resume 2.0 (1)
Dipankar Banik
 
GLOC Keynote 2014 - In-memory
GLOC Keynote 2014 - In-memoryGLOC Keynote 2014 - In-memory
GLOC Keynote 2014 - In-memory
Connor McDonald
 
Milan jain resume
Milan jain resumeMilan jain resume
Milan jain resume
Milan Jain
 
Best practices for large oracle apps r12 implementations apps14
Best practices for large oracle apps r12 implementations apps14Best practices for large oracle apps r12 implementations apps14
Best practices for large oracle apps r12 implementations apps14
Ajith Narayanan
 
New Generation of SPARC Processors Boosting Oracle S/W Angelo Rajadurai
New Generation of SPARC Processors Boosting Oracle S/W Angelo RajaduraiNew Generation of SPARC Processors Boosting Oracle S/W Angelo Rajadurai
New Generation of SPARC Processors Boosting Oracle S/W Angelo RajaduraiOrgad Kimchi
 
MySql's NoSQL -- best of both worlds on the same disks
MySql's NoSQL -- best of both worlds on the same disksMySql's NoSQL -- best of both worlds on the same disks
MySql's NoSQL -- best of both worlds on the same disks
Dave Stokes
 
YASEEN EDA VALAPPIL
YASEEN EDA VALAPPILYASEEN EDA VALAPPIL
YASEEN EDA VALAPPILYASEEN EV
 
Security a SPARC M7 CPU
Security a SPARC M7 CPUSecurity a SPARC M7 CPU
Security a SPARC M7 CPU
MarketingArrowECS_CZ
 
Zero Downtime for Oracle E-Business Suite on Oracle Exalogic
Zero Downtime for Oracle E-Business Suite on Oracle ExalogicZero Downtime for Oracle E-Business Suite on Oracle Exalogic
Zero Downtime for Oracle E-Business Suite on Oracle Exalogic
Paulo Fagundes
 
Free oracle performance tools
Free oracle performance toolsFree oracle performance tools
Free oracle performance tools
Rogerio Bacchi Eguchi
 
Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)
XPERT INFOTECH
 
Presentation oracle super cluster t5-8 technical deep dive
Presentation   oracle super cluster t5-8 technical deep divePresentation   oracle super cluster t5-8 technical deep dive
Presentation oracle super cluster t5-8 technical deep dive
solarisyougood
 
Oracle Database In-Memory Advisor (English)
Oracle Database In-Memory Advisor (English)Oracle Database In-Memory Advisor (English)
Oracle Database In-Memory Advisor (English)
Ileana Somesan
 
Konsolidace Oracle DB na systémech s procesory M7
Konsolidace Oracle DB na systémech s procesory M7Konsolidace Oracle DB na systémech s procesory M7
Konsolidace Oracle DB na systémech s procesory M7
MarketingArrowECS_CZ
 
SQL TUNING 101
SQL TUNING 101SQL TUNING 101
SQL TUNING 101
Alex Zaballa
 
Hideaki_ABE_RESUME_V2
Hideaki_ABE_RESUME_V2Hideaki_ABE_RESUME_V2
Hideaki_ABE_RESUME_V2Hideaki ABE
 
Migrating to Database 12c Multitenant - New Opportunities To Get It Right!
Migrating to Database 12c Multitenant - New Opportunities To Get It Right!Migrating to Database 12c Multitenant - New Opportunities To Get It Right!
Migrating to Database 12c Multitenant - New Opportunities To Get It Right!
Performance Tuning Corporation
 
PL/SQL Tips and Techniques Webinar Presentation
PL/SQL Tips and Techniques Webinar PresentationPL/SQL Tips and Techniques Webinar Presentation
PL/SQL Tips and Techniques Webinar Presentation
Embarcadero Technologies
 

Similar to Oracle PL/SQL Best Practices (20)

The Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result CacheThe Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result Cache
 
Developer day v2
Developer day v2Developer day v2
Developer day v2
 
Dipankar resume 2.0 (1)
Dipankar resume 2.0 (1)Dipankar resume 2.0 (1)
Dipankar resume 2.0 (1)
 
GLOC Keynote 2014 - In-memory
GLOC Keynote 2014 - In-memoryGLOC Keynote 2014 - In-memory
GLOC Keynote 2014 - In-memory
 
Milan jain resume
Milan jain resumeMilan jain resume
Milan jain resume
 
Best practices for large oracle apps r12 implementations apps14
Best practices for large oracle apps r12 implementations apps14Best practices for large oracle apps r12 implementations apps14
Best practices for large oracle apps r12 implementations apps14
 
New Generation of SPARC Processors Boosting Oracle S/W Angelo Rajadurai
New Generation of SPARC Processors Boosting Oracle S/W Angelo RajaduraiNew Generation of SPARC Processors Boosting Oracle S/W Angelo Rajadurai
New Generation of SPARC Processors Boosting Oracle S/W Angelo Rajadurai
 
MySql's NoSQL -- best of both worlds on the same disks
MySql's NoSQL -- best of both worlds on the same disksMySql's NoSQL -- best of both worlds on the same disks
MySql's NoSQL -- best of both worlds on the same disks
 
YASEEN EDA VALAPPIL
YASEEN EDA VALAPPILYASEEN EDA VALAPPIL
YASEEN EDA VALAPPIL
 
Security a SPARC M7 CPU
Security a SPARC M7 CPUSecurity a SPARC M7 CPU
Security a SPARC M7 CPU
 
Zero Downtime for Oracle E-Business Suite on Oracle Exalogic
Zero Downtime for Oracle E-Business Suite on Oracle ExalogicZero Downtime for Oracle E-Business Suite on Oracle Exalogic
Zero Downtime for Oracle E-Business Suite on Oracle Exalogic
 
Free oracle performance tools
Free oracle performance toolsFree oracle performance tools
Free oracle performance tools
 
Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)
 
Presentation oracle super cluster t5-8 technical deep dive
Presentation   oracle super cluster t5-8 technical deep divePresentation   oracle super cluster t5-8 technical deep dive
Presentation oracle super cluster t5-8 technical deep dive
 
Oracle Database In-Memory Advisor (English)
Oracle Database In-Memory Advisor (English)Oracle Database In-Memory Advisor (English)
Oracle Database In-Memory Advisor (English)
 
Konsolidace Oracle DB na systémech s procesory M7
Konsolidace Oracle DB na systémech s procesory M7Konsolidace Oracle DB na systémech s procesory M7
Konsolidace Oracle DB na systémech s procesory M7
 
SQL TUNING 101
SQL TUNING 101SQL TUNING 101
SQL TUNING 101
 
Hideaki_ABE_RESUME_V2
Hideaki_ABE_RESUME_V2Hideaki_ABE_RESUME_V2
Hideaki_ABE_RESUME_V2
 
Migrating to Database 12c Multitenant - New Opportunities To Get It Right!
Migrating to Database 12c Multitenant - New Opportunities To Get It Right!Migrating to Database 12c Multitenant - New Opportunities To Get It Right!
Migrating to Database 12c Multitenant - New Opportunities To Get It Right!
 
PL/SQL Tips and Techniques Webinar Presentation
PL/SQL Tips and Techniques Webinar PresentationPL/SQL Tips and Techniques Webinar Presentation
PL/SQL Tips and Techniques Webinar Presentation
 

Recently uploaded

【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】
【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】
【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】
NABLAS株式会社
 
Ch03-Managing the Object-Oriented Information Systems Project a.pdf
Ch03-Managing the Object-Oriented Information Systems Project a.pdfCh03-Managing the Object-Oriented Information Systems Project a.pdf
Ch03-Managing the Object-Oriented Information Systems Project a.pdf
haila53
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单
ewymefz
 
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
v3tuleee
 
Malana- Gimlet Market Analysis (Portfolio 2)
Malana- Gimlet Market Analysis (Portfolio 2)Malana- Gimlet Market Analysis (Portfolio 2)
Malana- Gimlet Market Analysis (Portfolio 2)
TravisMalana
 
一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单
enxupq
 
一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单
ewymefz
 
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
yhkoc
 
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
slg6lamcq
 
一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理
一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理
一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理
oz8q3jxlp
 
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
slg6lamcq
 
一比一原版(CBU毕业证)卡普顿大学毕业证成绩单
一比一原版(CBU毕业证)卡普顿大学毕业证成绩单一比一原版(CBU毕业证)卡普顿大学毕业证成绩单
一比一原版(CBU毕业证)卡普顿大学毕业证成绩单
nscud
 
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Subhajit Sahu
 
SOCRadar Germany 2024 Threat Landscape Report
SOCRadar Germany 2024 Threat Landscape ReportSOCRadar Germany 2024 Threat Landscape Report
SOCRadar Germany 2024 Threat Landscape Report
SOCRadar
 
Criminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdfCriminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdf
Criminal IP
 
一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单
一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单
一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单
nscud
 
一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单
一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单
一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单
ewymefz
 
Adjusting primitives for graph : SHORT REPORT / NOTES
Adjusting primitives for graph : SHORT REPORT / NOTESAdjusting primitives for graph : SHORT REPORT / NOTES
Adjusting primitives for graph : SHORT REPORT / NOTES
Subhajit Sahu
 
FP Growth Algorithm and its Applications
FP Growth Algorithm and its ApplicationsFP Growth Algorithm and its Applications
FP Growth Algorithm and its Applications
MaleehaSheikh2
 
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project PresentationPredicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Boston Institute of Analytics
 

Recently uploaded (20)

【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】
【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】
【社内勉強会資料_Octo: An Open-Source Generalist Robot Policy】
 
Ch03-Managing the Object-Oriented Information Systems Project a.pdf
Ch03-Managing the Object-Oriented Information Systems Project a.pdfCh03-Managing the Object-Oriented Information Systems Project a.pdf
Ch03-Managing the Object-Oriented Information Systems Project a.pdf
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单
 
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
 
Malana- Gimlet Market Analysis (Portfolio 2)
Malana- Gimlet Market Analysis (Portfolio 2)Malana- Gimlet Market Analysis (Portfolio 2)
Malana- Gimlet Market Analysis (Portfolio 2)
 
一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单
 
一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单
 
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
 
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
 
一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理
一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理
一比一原版(Deakin毕业证书)迪肯大学毕业证如何办理
 
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
 
一比一原版(CBU毕业证)卡普顿大学毕业证成绩单
一比一原版(CBU毕业证)卡普顿大学毕业证成绩单一比一原版(CBU毕业证)卡普顿大学毕业证成绩单
一比一原版(CBU毕业证)卡普顿大学毕业证成绩单
 
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
 
SOCRadar Germany 2024 Threat Landscape Report
SOCRadar Germany 2024 Threat Landscape ReportSOCRadar Germany 2024 Threat Landscape Report
SOCRadar Germany 2024 Threat Landscape Report
 
Criminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdfCriminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdf
 
一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单
一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单
一比一原版(CBU毕业证)不列颠海角大学毕业证成绩单
 
一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单
一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单
一比一原版(UPenn毕业证)宾夕法尼亚大学毕业证成绩单
 
Adjusting primitives for graph : SHORT REPORT / NOTES
Adjusting primitives for graph : SHORT REPORT / NOTESAdjusting primitives for graph : SHORT REPORT / NOTES
Adjusting primitives for graph : SHORT REPORT / NOTES
 
FP Growth Algorithm and its Applications
FP Growth Algorithm and its ApplicationsFP Growth Algorithm and its Applications
FP Growth Algorithm and its Applications
 
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project PresentationPredicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
 

Oracle PL/SQL Best Practices

Editor's Notes

  1. PL/SQL kodu yazarken sık kullandığımız değişken tanımlama metodu varchar2(N) şeklindedir. Bu şekilde değişken tanımlamanın belirli handikapları vardır ve bu handikaplar gün sonunda kodumuzun canlı ortamda hata almasına sebebiyet verebilmektedir. Örneğin PL/SQL kodumuzda X tablosundaki isim kolonunu bir değişkende tutup daha sonra kullanalım. İsim kolonumuzun veri tabanındaki tanımı varchar2(25) şeklinde olsun; Yazdığım PL/SQL kodunda da bu alanı hard coded bir şekilde varchar2(25) olarak kod bloğumu yazdığım durumda, X tablosundaki isim kolonun veri tipi/boyutu değişmediği sürece yazdığım kod parçası doğru çalışmaya devam edecek ancak ne zaman bu tablodaki bu kolonumun veri tipini/veri boyutunu değiştirdiğimde yazdığım PL/SQL kod bloğu çalışma zamanı hataları alacak. Bu hatayı gidermek istediğimde ise başka bir problem ile karşılaşacağım. İlgili alanı bu şekilde hard coded tanımladığım envanterimdeki tüm PL/SQL kodları içerisinde arayıp tek tek manuel değiştirmek zorundayım. Buda oldukça maliyetli bir işlem. Bu durumu engellemenin yolu ise bu şekilde değişken kullanımlarına ihtiyaç duyduğum her yerde %TYPE operatörü kullanarak alanların veri tipi veya veri boyutlarının değişme risklerine karşı PL/SQL kodlarımızın hata almasının önünde geçmek olmalı. Dorğudan bir kolonu adreslemeyen değişen ihtiyaçlarımız için ise paket seviyesinde SUBTYPE yaratıp ilerlemek yine PL/SQL kodlarımızın veri tipi kaynaklı hata almalarını minimize edecektir.
  2. PL/SQL kodları içine bir işi gerçekleştiren kural veya formülü doğrudan yazmak sıkça yapılan hatalar arasında. Bu tarz formüllerin ihtiyaç duyulan her yerde hard coded bir şekilde yazılması hatalı formüllerin veya iş kurallarının üretilmesine neden olabilir. Buna ek olarak formülde yapılacak bir değişiklik durumunda bu formülün hard coded yazıldığı her yerde tek tek manuel bulunup değiştirilmesi gerekmekte. Bu iş hem çok maliyetli hemde doğru bir şekilde arama işlemenin yapılmadığı durumda yanlış çalışan kod paraçaları anlamına gelecektir. Bu ve benzeri hataların önüne geçmek için sık kullanılan formülleri veya iş kurallarını ortak bir paket içerisinde farkılı procedure veya fonksiyonlar ile gerçekeleyip, kullanılması gereken yerlerde bu fonksiyon veya prosedürleri çağırarak kullanmak daha doğru ve hatalardan uzak bir kullanım şekli olacaktır. Böylelikle formülde yada iş kuralında bir değişiklik gerektiğinde sadece ilgili fonksiyon veya prosedürü değiştirerek iş tek bir değişiklik ile hatası tamamlanabilir.
  3. PL/SQL kod blokları yazılırken en sık yapılan kullanım hatalarından biride kod bloğu içinde çok sık hard coded SQL cümleleri yazmak. Kod bloklarında hard coded SQL yazmak çeşitli zorlukları’da beraberinde getirecektir. Bunlar; Optimize: İlgili SQL cümlesi iyileştirilmek edilmek istendiğinde, ilgili cümlenin geçtiği tüm kodlardaki etkinin doğru bir şekilde incelenip ona göre optimizasyon işleminin yapılması gerekmekte. Bu durum bu işlemin çok uzamasına ve zorlaşmasına neden olabilir. Maintain: İlgil SQL’de yapılacak herhangi bir değişikliğin kullanıldığı heryerde yapılması gerekmekte. Bu bağlamda kodun bakımı oldukça zorlaşacak. Debug: Debug yapılmak istendiğinde kodun yazıldığı heryerde debug işleminin yapılması gerekmekte.
  4. Hardcoded SQL yazımının yarattığı handikapların önüne geçmek için, şekildeki gibi bir yaklaşım uygulanarak SQL cümleleri, yazılan PL/SQL kodlarında bir servis şeklinde çağırılmalıdır. Bu yöntem ile çağıralacak SQL kodları merkezi bir paket içerisinde fonksiyon veya prosedür yazılarak, ihtiyaç duyulan yerlerde çağırılması sağlanarak belirli avantajlar sağlanacaktır. Bunlar; Kodun Optimzasyonunun daha kolay ve hızlı yapılması. , Kodun bakımının kolaylaşması., Olası bir değişikliğin Debug edilmesinin kolaylaşarak hızlanması, Kod tek bir yerde yazılacağı için daha hızlı kod geliştirilmesi, Bug onarımlarının tek bir yerden daha hızlı yapılması, Bir kez yazılan kodun tekrar tekrar kullanılması,
  5. Örnek bir SQL servisi. Bu servis ile EMPLOYEES tablosuna insert, update ve delete gibi sık yapılması muhtemel DML operasyonlarının kodları yazılarak bir servis haline getirilmiştir.
  6. PL/SQL kod bloklarında en sık kullandığımız yapılardan biride CURSOR ile bir veri gurubunu alıp satır satır işleme tabii tutmak. İlk bakışta bir performans problemi yokmuş gibi gözükse de bu durumun performansı negatif etkileyen önemli etkileri vardır. Bu etkiyi daha ayrıntılı açıklayabilmek adına ilk etapta bu mekanizmanın nasıl çalıştığını anlamak faydalı olacaktır.
  7. Oracle veritabanı kodlarımızı execute edebilmek için iki farklı engine sahip. Bunlar; PL/SQL Runtine Engine SQL Engine Yazdığımız PL/SQL kod bloklarında kodumuzun PL/SQL ile ilgili kısımları «PL/SQL Runtine Engine»’de SQL ile ilgili kısımları «SQL Engine»’de execute edilmekte ancak bu iş birbirinden bağımsız gerçekleşmemekte. Örneğin bir döngü içerisinde yapılan bir update işleminde döngü ile ilgili işlemler PL/SQL Runtime Engine içerisinde hesaplanıp, döngünün içerisindeki update cümlesine ilgili parametre geçirilip yeni bir SQL oluşturulmakta. Daha sonra bu oluşan SQL, SQL Engine gönderilip execute edilmesi sağlanıyor. (PL/SQL Runtime Engine ile SQL Engine arasındaki geçişlere Context Switching adı verilmekte. ) Bu işlem sonrasında bir sonuç oluşuyorsa, ilgili sonuç PL/SQL Runtime Engine geri döndürülüyor ve döngü bir sonraki iterasyon ile devam ediyor. Döngü sonlanana kadar bu işlem sırası ile gerçekleştiriliyor. Bu işlemler esnasında her adımda bir Context Switching söz konusu. Context her iki engine arasında her değiştiğinde belirli bir miktar süre kaybediliyor yapılan geçiş sebebi ile. Context Switch sayısının artması haliyle büyük performans kayıplarına sebebiyet vermekte.
  8. Context Switching maliyetini düşürmek için uygulanacak çözümlerden biri Bulk Processing. Bu yöntem ile işlenecek veri kümesi BULK COLLECT INTO söz deyimi ile bir kerede diziye atılıp daha sonra FORALL söz deyimi ile bu array minimum context switch ile veritabanına gönderiliyor ve işlemlerin daha hızlı yapılması sağlanıyor.
  9. Örnekte de görüldüğü üzere BULK PROCESSING standart kullandığımız yönteme göre neredeyse 2 kat daha hızlı çalıştı. Çalışma hızı performansı sistemimize ve işleyecek datanın büyüklüğüne göre pozitif olarak değişkenlik gösterebilir.
  10. Şekilden de anlaşılacağı üzere PL/SQL bloğunda üretilen DML’ler SQL Engine tek tek değil toplu bir şekilde gönderilmekte ve bu sayede daha az context switching yapılmakta. Context Switching in az yapılması uygulamamızın çalışma hızını pozitif yönde etkilemekte.
  11. BULK COLLECT’in kullanıldığı uygulamalarda, uygulamamızın memory tüketimine dikkat etmeliyiz. Eğer işleyeceğimiz veri miktarı büyükse, uygulamamızın memory tüketimini kontrol altına almak için LIMIT söz deyimini kullanmamız sistemin genel kaynak kullanımını pozitif yönde etkileyecektir.
  12. Bulk Processing kabaca şekildeki gibi çalışmaktadır.
  13. Yazdığımız kodlarda en çok dikkat etmemiz gereken konulardan biride memory yönetimi. Yazdığımız kodlar ve işleyeceğimiz veriler için Oracle tarafından arka planda belirli hafıza alanları tahsis edilir ve bu alanlar sistem ayakta olduğu sürece kullanılır. Bu memory alanları sınırsız olmadığından bu alanların efektif bir şekilde kullanımını yazdığımız kodlar ile belirli seviyede sağlamamız mümkün.
  14. Yazdığımız paket içerisinde tanımladığımız değişkenleri optimize etmek BULK COLLECT ile LIMIT cümlesi kullanmak BULK COLLECT ile VARRAY kullanımına dikkat etmek PARALLEL PIPELINED Fonksiyonların kullanımını arttırmak Fonksiyon veya Prosedürlere parametre aktarımlarında NOCOPY hinti kullanmak Yukarıda sıralamış olduğumuz hususlara dikkat etmemiz uygulamalarımızın daha etkin memory kullanmasına olanak sağlayacaktır.
  15. NOCOPY hinti verinin fonksiyon veya prosedürlere pass by reference mantığı ile taşınmasını sağlar. Transfer edilen parametre memory de başka bir alana kopyalanmadığı içinde yazdığımız kod bloğunun tükettiği memory miktarı transfer edeceğimiz parametrenin boyutuna bağlı olarak azalmakta ve genel performansımızı iyileştirmektedir. NOCOPY hinti kullanırken dikkat etmemiz gereken nokta, herhangi bir exception durumunda memoryde değişikliğe uğrattığımız parametrenin orijinal halini kaybetme riskimiz olacaktır. Bu riski göz önünde bulundurarak geliştirmelerimizi yapmalıyız.
  16. Veriyi cachleme yazdığımız programların daha performanslı çalışmasını etkileyen önemli parametrelerin başında gelmektedir. Oracle’ında bu bağlamda bize sunduğu bazı alt yapılar mevcuttur. Bu cacheleme alt yapılarını kullanarak performansı daha iyi olan etkin programlar geliştirebilmekteyiz. Veriyi cachlemek için Oracle bize bazı opsiyonlar sunmaktadır bu opsiyonlardan bazıları aşağıda listelenmiştir. Deterministic Functions PGA Caching Function Result Cache Yukarıda listelenmiş tekniklerin etkin kullanımı ile uygulamalarımızın veriye erişim sürelerini kısaltarak performans anlamında yüksek kazançlar elde edebilmekteyiz.
  17. Deterministic PL/SQL Functions: (Oracle 8i’den beri mevcut)Eğer deterministic yaratılmış bir fonksyion aynı parametre ile ikinci kez çağırılırsa, optimizer tarafından fonksyion ikinci kez çalıştırılmaz sonuç daha önce o değer için hesaplandığından dolayı otomatik olarak cache den getirilir. Böylelikle aynı parametreler için tekrar tekrar fonskyon çağırımı yapılmaz ve performans kazancı elde edilir. Caching using PGA: Program Global Area’ya erişmek System Global Area’ya erişmekten daha kolaydır. Dolayısıyla bu alanı efektif olarak kullanmak veri erişim sürelerini kısaltma bazında pozitif sonuçlar doğuracaktır. Özellikle collectionları bu bölge içerisinde tanımlayıp kullanmak erişim performansımızı arttıracaktır. Function Result Cache: (Oracle 11g ile gelen bir özellik) Function Result Cache aynı parametre ile çağırılan fonskyon için üretilen sonucu cacheler ve tekrar aynı parametre ile fonksyon çağırıldığında sonucu cacheden okur ve fonskyonu çalıştırmaz. RESULT_CACHE ile yaratılan fonksyonlar ile üretilen sonuclar tüm sessionların erişebildiği bir noktada tutularak, farklı sessionlar tarafından da sonucun kullanılmasına olanak sağlamasıdır.
  18. Function Result Cache: Function Result Cache aynı parametre ile çağırılan fonskyon için üretilen sonucu cacheler ve tekrar aynı parametre ile fonksyon çağırıldığında sonucu cacheden okur ve fonskyonu çalıştırmaz. Deterministic fonksiyonlardan farkı, üretilen sonucun tüm sessionların erişebildiği bir noktada tutularak, farklı sessionlar tarafından da sonucun kullanılmasına olanak sağlamasıdır. RESULT_CACHE cümlesi optimizer’a parametre bazlı sonuçların bu fonksyon için saklanması gerektiğini söyler. Sonuçlar cachelendiği için aynı parametre ile tekrar fonksyon çağırıldığında optimizer sonucu cachledigi anlar ve sonucu cacheden okur. RELIES_ON cümlesi ise fonksyonun kullandığı tablodaki olası data değişiminin algılanıp (cachedeki sonucun değişimine neden olacak durumlarda) cache deki sonucu invalid hale getirip aynı parametre ile tekrar çağırıldığında fonksyonun yeniden çalışmasını sağlamak olacaktır.
  19. Deterministic PL/SQL Functions: Eğer deterministic yaratılmış bir fonksyion aynı parametre ile ikinci kez çağırılırsa, optimizer tarafından fonksyion ikinci kez çalıştırılmaz sonuç daha önce o değer için hesaplandığından dolayı otomatik olarak cache den getirilir. Böylelikle aynı parametreler için tekrar tekrar fonskyon çağırımı yapılmaz ve performans kazancı elde edilir.