ওরাকল জেডিবিসি অপ্টিমাইজেশন: একটি স্প্রিং বুট অ্যাপ্লিকেশনটিতে প্রিপারেটস্টেটমেন্ট ক্যাশে সক্ষম করুন


9

আমার কাছে একটি স্প্রিং বুট REST অ্যাপ্লিকেশন রয়েছে যা একটি ওরাকল ডাটাবেসের সাথে সংযুক্ত। আমরা JdbcTemplate ব্যবহার করে জেডিবিসি ব্যবহার করছি। ওরাকল ডাটাবেজ বৈশিষ্ট্য এই 3 মাধ্যমে প্রাপ্ত হয় application.properties সেটিংস:

spring.datasource.url
spring.datasource.username
spring.datasource.password

এই অ্যাপ্লিকেশনটি হিকারিসিপি ব্যবহার করছে। হিকারিসিপি ওয়েবসাইট থেকে, আমি জানতে পেরেছিলাম যে এই পুলটি প্রিপার্ডস্টেটমেন্টগুলি ক্যাশে করে না কারণ এটি করতে জেডিবিসি ড্রাইভার সেরা সেটআপ।

এখন, এগুলি নিশ্চিত করার জন্য আমি কোথায় এবং কী নির্দিষ্ট করব:

  1. যে ওরাকল জেডিবিসি ড্রাইভার (ojdbc7.jar) প্রিপার স্টেটমেন্টগুলি ক্যাশে করে। এটি যে ক্যাশে করতে পারে এমন প্রস্তুতির স্টেটমেন্টের সংখ্যা কাস্টমাইজ করার কোনও উপায় আছে?

  2. Https://howtodoinjava.com/java/jdbc/best-practices-to-improve-jdbc-performance/ থেকে , আমরা দেখতে পেলাম

    আপনার ডাটাবেস সর্বাধিক প্যাকেটের আকারে সেট করা আছে এবং ড্রাইভার সেই প্যাকেটের আকারের সাথে মেলে তা নিশ্চিত করুন। বৃহত্তর ফলাফল সেট আনার জন্য, এটি ড্রাইভার এবং সার্ভারের মধ্যে প্রেরিত / প্রাপ্ত মোট প্যাকেটের সংখ্যা হ্রাস করে।

উপরোক্ত অনুসারে, পদক্ষেপগুলি কী দরকার

  1. ওরাকল ডিবি সার্ভারের প্যাকেটের আকারটি সন্ধান করুন
  2. ওরাকল ডিবি সার্ভার সর্বাধিক প্যাকেটের আকারে সেট করা আছে কিনা তা সন্ধান করুন
  3. ওরাকল জেডিবিসি ড্রাইভারের (ojdbc8.jar) প্যাকেটের আকার নির্ধারণ করুন।

অন্য কোনও (ওরাকল) জেডিবিসি পারফরম্যান্স অপটিমাইজেশন টিপ প্রশংসা করা হবে।


ডিবিএ সাইটে জিজ্ঞাসা করা কি আরও উপযুক্ত? dba.stackexchange.com/questions/tagged/oracle
user7294900

2
@ user7294900 আসলে নয়, কারণ এটি জেডিবিসি ড্রাইভারকে কনফিগার করার বিষয়ে (এটি ধরে নেওয়াও এর এমন একটি কনফিগারেশন বিকল্প রয়েছে), এটি একটি প্রোগ্রামিং প্রশ্ন এবং ডিবিএ প্রশ্ন নয়।
মার্ক রোটভিল

উত্তর:


2

হাই ফাংশনটি প্রিপারেটেড স্টেটমেন্ট ক্যাচিং সক্ষম করুন স্প্রিংয়ের সাথে নয়, আরইএসটি-র সাথে কিছুই করার নেই। এই ফাংশনটি কেবল আপনার ডেটাসোর্স, আপনার জেডিবিসি ড্রাইভার এবং আপনার ডাটাবেসের মধ্যে আলোচনার প্রশ্ন। কীভাবে এটি সেট আপ করা যায় তা জানতে আপনার ড্রাইভার, ডাটাসোর্স এবং ডাটাবেস সম্পর্কিত প্রাসঙ্গিক ডকুমেন্টেশন পড়ুন।

এটা Hikari বিষয় আসে, তখন এই কাজ করতে coirrect উপায় (বিজ্ঞপ্তি datasource2 , এর পুনঃনামকরণ ডেটাউত্স স্বয়ংক্রিয় সক্ষম করতে):

spring:
  datasource2:
      dataSourceClassName: com.zaxxer.hikari.HikariDatasource
       .....
       ......
      configuration:
            maximumPoolSize: 25  
            data-source-properties:
               ImplicitCachingEnabled: true
               MaxStatements: 100

আপনার কনফিগারেশনের অভ্যন্তরীণ বৈশিষ্ট্যগুলি সরাসরি অন্তর্নিহিত ড্রাইভারকে দেওয়া হবে।

@Bean
@ConfigurationProperties("spring.datasource2")
public DataSourceProperties dataSourceProperties2() {
    return new DataSourceProperties();
}

@Bean()
@ConfigurationProperties("spring.datasource2.configuration")
public DataSource hikariDatasource() {


    return dataSourceProperties2().initializeDataSourceBuilder().build();

}

এই উদাহরণটি অন্তর্নিহিত ডাটাসোর্সের ম্যানুয়াল সূচনা ব্যবহার করে ization


এটি মাইএসকিউএল কনফিগারেশন, cachePrepStmtsএটি একটি মাইএসকিউএল জেডিবিসি ড্রাইভার বিকল্প github.com/brettwooldridge/HikariCP/blob/… এবং dev.mysql.com/doc/connector-j/5.1/en/… দেখুন
করোল ডউবেকি

@ করোলডোবেকি সত্যই এই উদাহরণটি ডিবি 2 তে চলছিল :)
আলেকজান্ডার পেট্রোভ

পয়েন্টটি data-source-propertiesএকটি প্রক্সি, এটি ড্রাইভারকে সম্পত্তিগুলি পাস করে তাই যদি ড্রাইভারের cachePrepStmtsসম্পত্তি না থাকে তবে এটি কাজ করবে না। ojdbc8 ড্রাইভারের এই বৈশিষ্ট্য নেই।
ক্যারল ডউবেকি

@ কারোলডোবেকি সম্ভবত বসন্ত বুট আরএসটি এবং যে কোনও কিছু না জড়িত করার পরিবর্তে আপনার "প্রশ্নটি আবার কী কী সম্পত্তি" ওরাকলে স্টেটমেন্ট ক্যাচিং সক্ষম করতে "আপনার পরিবর্তনের উচিত। docs.oracle.com/cd/B19306_01/java.102/b14355/…
আলেকজান্ডার

@ আলেকজান্ডারপেট্রভ: হাই, আমি এখানে ওপি আছি। আমি REST অংশটি সরিয়েছি। আমার ojdbc7.jar ব্যবহার করে ওরাকল 11/12 এর জন্য কনফিগারেশন বৈশিষ্ট্যগুলি দরকার
অঞ্জানব

0
  • মাধ্যমে বিবৃতি ক্যাচিং সক্ষম করুন

oracleDataSource.setImplicitCachingEnabled(true)

  • স্মৃতিটিকে সর্বোত্তমভাবে ব্যবহার করতে ডান ক্যাশে আকার চয়ন করুন

connection.setStatementCacheSize(10) সর্বাধিক ব্যবহৃত বিবৃতিগুলির সংখ্যার নিকটবর্তী হওয়ার চেষ্টা করুন ডিফল্ট বিবৃতি ক্যাশের আকার 10

  • যদি আপনি স্টেটমেন্ট ক্যাচিং ব্যবহার করতে অ্যাপ্লিকেশন পরিবর্তন করতে না পারেন তবে ফলব্যাক

session_cached_cursors = 50 Connection.setStatementCacheSize(10)


ওরাকলডাটাসোর্সে আমার অ্যাক্সেস নেই। আমার যে সমস্ত অ্যাক্সেস রয়েছে তা হ'ল জেডিবিসিটাইমপ্লেট যা থেকে আমি হিকারি ডেটাসোর্স পাব। আমি সংযোগ স্তরেও যাই না - আমি জেডিবিসিটেম্পলেট স্তরে কাজ করি।
অঞ্জনব

0

আপনার ojdbc8.jarডাটাবেস সার্ভার সংস্করণের সাথে মেলে তা নিশ্চিত করার জন্য ডকুমেন্টেশন চেক করে শুরু করুন । ojdbc8.jar11g, 11gR2, 12c এর বিভিন্ন সংস্করণ রয়েছে ।

অনুযায়ী এই উত্তর , আপনি প্রয়োজন oracle.jdbc.implicitStatementCacheSizeJDBC ড্রাইভার সেট করা সম্পত্তি। এই নিবন্ধটিতে আরও কয়েকটি জেডিবিসি ড্রাইভারের বৈশিষ্ট্য উল্লেখ করা হয়েছে যেমন oracle.jdbc.freeMemoryOnEnterImplicitCacheবা oracle.jdbc.maxCachedBufferSize। এই বৈশিষ্ট্যগুলি উপলব্ধ কিনা তা নিশ্চিত করার জন্য আপনাকে নিজের ড্রাইভার সংস্করণে ডক্স পরীক্ষা করতে হবে।

এটি স্প্রিং বুট হিকারিসিপি spring.datasource.hikari.data-source-propertiesবিকল্প ব্যবহার করে পাস করা যেতে পারে । আপনার স্প্রিং বুট সংস্করণটির জন্য ডাবল চেক ডক্স, এই সম্পত্তিটির নাম পরিবর্তন করে দেওয়া হয়েছিল কমপক্ষে একবার:

application.yaml

spring:
  datasource:
    hikari:
      data-source-properties:
        oracle.jdbc.implicitStatementCacheSize: 100  

application.properties

spring.datasource.hikari.data-source-properties.oracle.jdbc.implicitStatementCacheSize: 100 

আপনি বিবৃতি আনতে আকারে আগ্রহীও হতে পারেন তবে এই অপটিমাইজেশনটি প্রতিটি বিবৃতিতে সাধারণত পৃথকভাবে প্রয়োগ করা হয়।


হাই @ কারোল, ধন্যবাদ আমি কীভাবে এই অ্যাপ্লিকেশন.আইএমএল ফাইলের পরিবর্তে অ্যাপ্লিকেশন.প্রপার্টি ফাইল ব্যবহার করে এই বৈশিষ্ট্যগুলিকে পুনরায় নতুন করে লিখব?
অঞ্জনব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.