উপাদানযুক্ত দেখুন সম্পূর্ণ রিফ্রেশ বা ম্যানুয়াল সমতুল্যতার জন্য পুনরায় সীমাবদ্ধ করুন


10

একটি ম্যাজিমালাইজড ভিউ (এমভি) লগটি এমভিকে দ্রুত রিফ্রেশ করার অনুমতি দেওয়ার জন্য ব্যবহার করা যেতে পারে যা কেবল পরিবর্তিত ডেটা পরিবর্তন করে। যাইহোক, বিভিন্ন শর্তগুলি এমভিটিকে লগটি ব্যবহার করতে বাধা দেয় এবং তাই সম্পূর্ণ রিফ্রেশ দরকার require ওরাকল প্রতিটি রেকর্ড মুছতে এবং asোকানোর জন্য একটি পারমাণবিক সম্পূর্ণ রিফ্রেশ প্রয়োগ করে। চূড়ান্তভাবে ডেটাতে কোনও পরিবর্তন না হলেও এটি এটি করে।

পুনরায় প্রজন্মের বিষয়ে এই প্রতিলিপিটি বুদ্ধিমান করার কোনও উপায় আছে কি ? একটি বিলোপের পরে একটি মার্জের জন্য উত্সটি দু'বার জিজ্ঞাসা করা দরকার। একটি বাল্ক মার্জ এবং মুছে ফেলার জন্য কী পরিমাণে ডেটা সংগ্রহ করা উপযুক্ত হবে? একটি ভাল উপায় আছে কি?

হালনাগাদ:

আমি একটি মঞ্চ অঞ্চল হিসাবে একটি গ্লোবাল অস্থায়ী টেবিল ব্যবহার অন্বেষণ। যদিও তারা পুনরায় অর্ধেকেরও কম ব্যবহার করে, তবুও তারা অনেকটা ব্যবহার করে।


আপনি জিটিটি কোড পোস্ট করতে পারেন? জিটিটি সরাসরি পুনরায় তৈরি করে না, তবে তারা পূর্বাবস্থায় ফেরত জেনারেট করে - এবং পূর্বাবস্থায় ফেরানো পুনরায় তৈরি করে। insertঅপসগুলি অপস deleteবা updateঅপ্সের তুলনায় অনেক কম পূর্বাবস্থায় উত্পন্ন করে (বাস্তবে প্রায় কিছুই নয়)। কোনও ব্যয়বহুল অপস এড়ানোর জন্য একাধিক জিটিএস থাকা ভাল পদ্ধতির হতে পারে
জ্যাক বলেছে টপান্সওয়ার্স.অক্সিজ

@ জ্যাক ডগলাস psoug.org/references/gtt.html এর একটি জিটিটি রিডো জেনারেশন ডেমো রয়েছে যা শারীরিক টেবিল এবং insertএর জন্য জিটিটির মধ্যে পুনর্নির্মাণে 60% হ্রাস দেখায় । এটি আমি যে ফলাফলগুলি দেখছি তা নিবিড়ভাবে মেলে এবং এটি ভাল তবে আমার মতো ততটা ভাল নয়।
লেইফ রিফেল

এই পরীক্ষাগুলি (সারি-সারি সারি এবং কোনও appendইঙ্গিত) পুনরায় করা হ্রাস করার জন্য আদর্শ শর্ত নয় - আমি কী বোঝাতে চাইছি তা দেখানোর জন্য আমি কয়েকটি পরীক্ষা চালিয়েছি। একটি উত্তর হিসাবে পোস্ট করা হয়েছে কারণ তারা কোনও মন্তব্যে ফিট করে না
জ্যাক বলেছে টপান্সওয়ার্স.অক্সিজ

উত্তর:


5

এটি কেবল insertপুরো প্রশ্নের উত্তর না দিয়ে বিভিন্ন ক্রিয়াকলাপ পুনরায় ব্যবহার প্রদর্শন করার উদ্দেশ্যে । আমার 10 গ্রাম উদাহরণের ফলাফলগুলি 100% নিরঙ্কুশ নয়, তবে প্রতিবার যখন দেখলাম তখন বিস্তৃত চিত্র একই ছিল।

হিপ টেবিলগুলির জন্য, কেন জানি না কেন insert /*+ append */উত্পন্ন আরও পুনরায় করা হয়েছিল।

টেস্টবেড:

create table heap_noappend(id integer, dummy char(500));
create table heap_append(id integer, dummy char(500));
create global temporary table gtt_noappend(id integer, dummy char(500));
create global temporary table gtt_append(id integer, dummy char(500));
create global temporary table gtt_results(stage integer, val integer);

পরীক্ষা:

insert into gtt_results(stage, val)
select 0, value from v$statname join v$sesstat using(statistic#)
where sid=sys_context('userenv','sid') and name='redo size';

insert into heap_noappend(id, dummy)
select level, 'A' from dual connect by level<1000;

insert into gtt_results(stage, val)
select 1, value from v$statname join v$sesstat using(statistic#)
where sid=sys_context('userenv','sid') and name='redo size';

insert /*+ append */ into heap_append(id, dummy)
select level, 'A' from dual connect by level<1000;

insert into gtt_results(stage, val)
select 2, value from v$statname join v$sesstat using(statistic#)
where sid=sys_context('userenv','sid') and name='redo size';

insert into gtt_noappend(id, dummy)
select level, 'A' from dual connect by level<1000;

insert into gtt_results(stage, val)
select 3, value from v$statname join v$sesstat using(statistic#)
where sid=sys_context('userenv','sid') and name='redo size';

insert /*+ append */ into gtt_append(id, dummy)
select level, 'A' from dual connect by level<1000;

insert into gtt_results(stage, val)
select 4, value from v$statname join v$sesstat using(statistic#)
where sid=sys_context('userenv','sid') and name='redo size';

ফলাফল:

select * 
from( select decode(stage,1,'heap noappend',
                          2,'heap append',
                          3,'gtt noappend',
                          4,'gtt append') as operation, 
             val-lag(val) over(order by stage) as redo 
      from gtt_results)
where redo is not null;

OPERATION     REDO                   
------------- ---------------------- 
heap noappend 606932                 
heap append   690768                 
gtt noappend  41488                  
gtt append    256                   

আপনি অবশ্যই সঠিক। আমার পরীক্ষা করা উচিত ছিল। আমি এটা চেষ্টা করে দেখব.
লেইফ রিফেল

6

ভাল প্রশ্ন. আমি আমার সমস্যার জন্য এই সমস্যার সমাধান করেছি কিছুক্ষণ আগে এমভি এবং তাদের উপর যে কোনও সূচি নকল করে। এটির আমার পরিস্থিতিটির কোনও অর্থ নেই - আমি যাই হোক না কেন এই দৃশ্যের একটি সম্পূর্ণ রিফ্রেশ করছি, কেন আমার আবার প্রয়োজন হবে?


1
আপনার ATOMIC_REFRESH = মিথ্যাও প্রয়োজন হতে পারে (10 গ্রাম এবং উপরে)। সংরক্ষণাগার লগ সহ কোনও স্ট্যান্ডবাই ডাটাবেস বা পুনরুদ্ধারের জন্য কী কী প্রভাব ফেলতে পারে তা নিশ্চিত নন?
জ্যাক বলছেন টপান্সওয়ার্স.অক্সিজ

আমি এটি দিয়ে ডেটাবেসটিতে একটি যৌক্তিক এবং একটি শারীরিক স্ট্যান্ডবাই চালাই। কোন সমস্যা নেই। আমি ডিবি অনুলিপিগুলি তৈরির ক্ষেত্রে একটি সমস্যা নিয়ে এসেছি - আমার নোটগুলি দেখতে হবে তবে একটি ত্রুটি ছিল যা আমি মাঝে মাঝে টেবিলগুলির সাথে টিক চিহ্ন সহ পুনরুদ্ধার করতে পারি। আমি সারণী / সূচিগুলির জন্য সংরক্ষিত একটি টেবিলস্পেস তৈরি করার জন্য সুপারিশগুলি পড়েছি যা এ জাতীয় সমস্যাগুলি এড়াতে অবরুদ্ধ নয়। আমি কীভাবে এটি সমাধান করতে হবে তা নির্ধারণ করেছিলাম।
ডিসিকি

@ জ্যাক, আমি বিশ্বাস করি যে আমাকে অ পারমাণবিক রিফ্রেশ ব্যবহার করতে হবে না।
ডিসিকি

হুঁ, আমি যদি একটি স্ট্যান্ডার্ড মেটেরাইজড ভিউ ব্যবহার করি তবে এটিকে একটি পারমাণবিক রিফ্রেশ করা দরকার, সুতরাং এটি আমার পক্ষে কার্যকর হবে না। অন্য কারও কাছে এটি দরকারী মনে হতে পারে, সুতরাং এটি এখনও একটি ভাল উত্তর।
লেইফ রিফেল

কেন এটি একটি পারমাণবিক রিফ্রেশ প্রয়োজন? যেহেতু আমি এটি বুঝতে পারি, এটি মিথ্যা হিসাবে সেট করা কেবল একটি সম্পূর্ণ রিফ্রেশকে প্রভাবিত করে। এই জিজ্ঞাসাটি পোস্টটি দেখুন: Asktom.oracle.com/pls/apex/…
ডিসিকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.