Highload ++ سائبيريا 2019 جي نقش قدم تي - Oracle تي 8 ڪم

هيلو!

24-25 جون تي، Highload++ سائبيريا 2019 ڪانفرنس Novosibirsk ۾ منعقد ڪئي وئي. اسان جا ماڻهو پڻ اتي هئا رپورٽ "Oracle ڪنٽينر ڊيٽابيس (CDB/PDB) ۽ سافٽ ويئر ڊولپمينٽ لاءِ انهن جو عملي استعمال"، اسان ٿوري دير کان پوءِ ٽيڪسٽ ورزن شايع ڪنداسين. اهو ٿڌو هو، مهرباني olegbunin تنظيم لاء، انهي سان گڏ هر ڪنهن لاء جيڪو آيو هو.

Highload ++ سائبيريا 2019 جي نقش قدم تي - Oracle تي 8 ڪم
هن پوسٽ ۾، اسان توهان سان حصيداري ڪرڻ چاهيندا هئاسين جيڪي مسئلا اسان جي بوٿ تي هئا ته جيئن توهان پنهنجي Oracle علم کي جانچي سگھو. ڪٽ هيٺان 8 مسئلا، جواب جا اختيار ۽ وضاحت ڏنل آهن.

هيٺ ڏنل اسڪرپٽ تي عمل ڪرڻ جي نتيجي ۾ اسان کي وڌ ۾ وڌ ترتيب جي قيمت ڇا آهي؟

create sequence s start with 1;
 
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;

  • 1
  • 5
  • 10
  • 25
  • نه، اتي هڪ غلطي ٿيندي

جواب ڏيوOracle دستاويزن جي مطابق (8.1.6 مان حوالو ڏنو ويو):
هڪ واحد SQL بيان جي اندر، Oracle هر قطار ۾ صرف هڪ ڀيرو تسلسل وڌائيندو. جيڪڏهن بيان هڪ تسلسل لاءِ NEXTVAL لاءِ هڪ کان وڌيڪ حوالن تي مشتمل آهي، Oracle تسلسل کي هڪ ڀيرو وڌائي ٿو ۽ NEXTVAL جي سڀني واقعن لاءِ ساڳيو قدر واپس ڪري ٿو. جيڪڏهن بيان ۾ CURRVAL ۽ NEXTVAL ٻنهي جا حوالا شامل آهن، Oracle تسلسل کي وڌائي ٿو ۽ CURRVAL ۽ NEXTVAL ٻنهي لاءِ ساڳي قدر واپس ڪري ٿو بغير بيان جي انهن جي ترتيب جي.

اهڙيء طرح، وڌ ۾ وڌ قدر لائنن جي تعداد سان ملندو، يعني 5.

هيٺ ڏنل اسڪرپٽ هلائڻ جي نتيجي ۾ ٽيبل ۾ ڪيتريون قطارون هونديون؟

create table t(i integer check (i < 5));
 
create procedure p(p_from integer, p_to integer) as
begin
    for i in p_from .. p_to loop
        insert into t values (i);
    end loop;
end;
/
 
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);

  • 0
  • 3
  • 4
  • 5
  • 6
  • 9

جواب ڏيوOracle دستاويزن جي مطابق (11.2 مان حوالو ڏنو ويو):

ڪنهن به SQL بيان تي عمل ڪرڻ کان اڳ، Oracle نشان لڳل هڪ امڪاني محفوظ پوائنٽ (توهان لاءِ دستياب ناهي). پوءِ، جيڪڏهن بيان ناڪام ٿئي ٿو، Oracle ان کي خودڪار طريقي سان واپس ڪري ٿو ۽ SQLCA ۾ SQLCODE تي لاڳو ٿيل نقص ڪوڊ واپس ڪري ٿو. مثال طور، جيڪڏهن هڪ INSERT بيان هڪ منفرد انڊيڪس ۾ نقل جي قيمت داخل ڪرڻ جي ڪوشش ڪندي هڪ غلطي پيدا ڪري ٿي، بيان کي واپس ڪيو ويندو.

ڪلائنٽ کان HP ڪال ڪرڻ پڻ سمجهيو ويندو آهي ۽ هڪ واحد بيان جي طور تي پروسيس ڪيو ويندو آهي. اهڙيءَ طرح، پهرين HP ڪال ڪاميابيءَ سان مڪمل ٿي، ٽي رڪارڊ داخل ڪري؛ ٻيو HP ڪال هڪ غلطي سان ختم ٿئي ٿو ۽ چوٿين رڪارڊ کي واپس ڪري ٿو جيڪو هن داخل ڪرڻ ۾ منظم ڪيو؛ ٽيون ڪال ناڪام، ۽ ٽيبل ۾ ٽي رڪارڊ آهن.

هيٺ ڏنل اسڪرپٽ هلائڻ جي نتيجي ۾ ٽيبل ۾ ڪيتريون قطارون هونديون؟

create table t(i integer, constraint i_ch check (i < 3));
 
begin
    insert into t values (1);
    insert into t values (null);
    insert into t values (2);
    insert into t values (null);
    insert into t values (3);
    insert into t values (null);
    insert into t values (4);
    insert into t values (null);
    insert into t values (5);
exception
    when others then
        dbms_output.put_line('Oops!');
end;
/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

جواب ڏيوOracle دستاويزن جي مطابق (11.2 مان حوالو ڏنو ويو):

هڪ چيڪ رڪاوٽ توهان کي هڪ شرط بيان ڪرڻ جي اجازت ڏئي ٿي جيڪا ٽيبل ۾ هر قطار کي پورو ڪرڻ گهرجي. پابنديءَ کي پورو ڪرڻ لاءِ، جدول ۾ هر قطار کي شرط رکڻ گهرجي يا ته صحيح يا اڻڄاتل (نال جي ڪري). جڏهن Oracle هڪ خاص قطار لاءِ چيڪ ڪنٽرينٽ حالت جو جائزو وٺي ٿو، حالت ۾ ڪنهن به ڪالمن جا نالا ان قطار ۾ ڪالمن جي قدرن جو حوالو ڏين ٿا.

اهڙيء طرح، قدر null چيڪ پاس ڪندو، ۽ گمنام بلاڪ ڪاميابيء سان عمل ڪيو ويندو جيستائين قيمت 3 داخل ڪرڻ جي ڪوشش ڪئي وڃي. ان کان پوء، غلطي کي هٿي ڏيڻ وارو بلاڪ استثنا کي صاف ڪندو، ڪو به رول بيڪ نه ٿيندو، ۽ ٽيبل ۾ چار قطارون رهجي وينديون قدر سان 1، null، 2 ۽ null ٻيهر.

ڪهڙن قدرن جو جوڙو بلاڪ ۾ ساڳي جاءِ وٺي ويندو؟

create table t (
    a char(1 char),
    b char(10 char),
    c char(100 char),
    i number(4),
    j number(14),
    k number(24),
    x varchar2(1 char),
    y varchar2(10 char),
    z varchar2(100 char));
 
insert into t (a, b, i, j, x, y)
    values ('Y', 'Вася', 10, 10, 'Д', 'Вася');

  • اي ۽ ايڪس
  • بي ۽ يو
  • سي ۽ ڪي
  • سي ۽ زي
  • K ۽ Z
  • آء ۽ جي
  • جي ۽ ايڪس
  • سڀ درج ٿيل

جواب ڏيوOracle ۾ ڊيٽا جي مختلف قسمن کي محفوظ ڪرڻ تي دستاويزن (12.1.0.2) مان هتي اقتباس آهن.

CHAR ڊيٽا جو قسم
CHAR ڊيٽا جو قسم بيان ڪري ٿو ھڪڙي مقرر ڊگھائي ڪردار جي اسٽرنگ کي ڊيٽابيس جي ڪردار جي سيٽ ۾. توھان بيان ڪريو ٿا ڊيٽابيس جو ڪردار سيٽ جڏھن توھان پنھنجو ڊيٽابيس ٺاھيو. Oracle انهي ڳالهه کي يقيني بڻائي ٿو ته CHAR ڪالمن ۾ محفوظ ڪيل سڀئي قيمتون چونڊيل ڊگھائي سيمينٽڪس ۾ سائيز طرفان بيان ڪيل ڊيگهه آهن. جيڪڏهن توهان هڪ قدر داخل ڪريو ٿا جيڪو ڪالمن جي ڊيگهه کان ننڍو آهي، پوء Oracle blank-pads قدر کي ڪالمن جي ڊيگهه تائين.

VARCHAR2 ڊيٽا جو قسم
VARCHAR2 ڊيٽا جو قسم بيان ڪري ٿو هڪ متغير-لمبائي ڪردار جي اسٽرنگ ڊيٽابيس جي ڪردار جي سيٽ ۾. توھان بيان ڪريو ٿا ڊيٽابيس جو ڪردار سيٽ جڏھن توھان پنھنجو ڊيٽابيس ٺاھيو. Oracle هڪ VARCHAR2 ڪالمن ۾ هڪ ڪردار جي قيمت کي محفوظ ڪري ٿو بلڪل جيئن توهان ان کي بيان ڪيو آهي، بغير ڪنهن خالي-پيڊنگ جي، بشرطيڪ اها قيمت ڪالمن جي ڊيگهه کان وڌيڪ نه هجي.

NUMBER ڊيٽا جو قسم
NUMBER ڊيٽا جو قسم 1.0 x 10-130 کان 1.0 x 10126 تائين مڪمل قدرن سان گڏ صفر سان گڏ مثبت ۽ منفي مقرر ٿيل نمبرن کي محفوظ ڪري ٿو پر 1.0 x 10126 شامل نه آهي. جيڪڏهن توهان هڪ رياضياتي اظهار بيان ڪيو جنهن جي قيمت هڪ مطلق قيمت کان وڌيڪ يا برابر هجي 1 x 22، پوء Oracle هڪ غلطي موٽائي ٿو. هر NUMBER قدر جي ضرورت آهي XNUMX کان XNUMX بائيٽ تائين. انهي کي مدنظر رکندي، ڪالمن جي سائيز بائيٽ ۾ هڪ خاص عددي ڊيٽا جي قيمت NUMBER(p) لاءِ، جتي p ڏنل قيمت جي درستي آهي، هيٺ ڏنل فارمولا استعمال ڪندي حساب ڪري سگهجي ٿو: گول((ڊگھائي(p)+s)/2))+1 جتي s صفر جي برابر آهي جيڪڏهن نمبر مثبت آهي، ۽ s 1 برابر آهي جيڪڏهن نمبر منفي آهي.

اضافي طور تي، اچو ته هڪ اقتباس وٺون دستاويزن مان ذخيرو ڪرڻ بابت نول قدر.

null هڪ ڪالمن ۾ قدر جي غير موجودگي آهي. نيل ظاهر ڪري ٿو غائب، اڻڄاتل، يا غير قابل اطلاق ڊيٽا. نولس ڊيٽابيس ۾ ذخيرو ٿيل آهن جيڪڏهن اهي ڪالمن جي وچ ۾ ڊيٽا جي قيمتن سان گڏ هجن. انهن حالتن ۾، انهن کي ڪالمن جي ڊيگهه (صفر) کي ذخيرو ڪرڻ لاء 1 بائيٽ جي ضرورت آهي. هڪ قطار ۾ هلندڙ نالن کي ڪنهن به اسٽوريج جي ضرورت ناهي ڇو ته هڪ نئين قطار جي هيڊر سگنل ڏئي ٿي ته پوئين قطار ۾ باقي ڪالمن null آهن. مثال طور، جيڪڏهن جدول جا آخري ٽي ڪالم null آهن، ته پوءِ انهن ڪالمن لاءِ ڪو به ڊيٽا محفوظ نه آهي.

انهن ڊيٽا جي بنياد تي، اسان دليل ٺاهيندا آهيون. اسان فرض ڪريون ٿا ته ڊيٽابيس AL32UTF8 انڪوڊنگ استعمال ڪري ٿو. ھن انڪوڊنگ ۾، روسي اکر 2 بائيٽ تي قبضو ڪندا.

1) A ۽ X، فيلڊ جي قيمت 'Y' 1 بائيٽ وٺندي آهي، فيلڊ x 'D' جي قيمت 2 بائيٽ وٺندي آهي.
2) B ۽ Y، b ۾ ’واسيا‘ 10 اکرن تائين اسپيس سان پيڊ ڪيو ويندو ۽ 14 بائيٽ وٺندو، ڊي ۾ ’واسيا‘ 8 بائيٽ وٺندو.
3) C ۽ K. ٻنهي فيلڊن جي قيمت NULL آهي، انهن کان پوء اهم فيلڊ آهن، تنهنڪري اهي 1 بائيٽ تي قبضو ڪن ٿا.
4) C ۽ Z. ٻنهي فيلڊن جي قيمت NULL آهي، پر فيلڊ Z جدول ۾ آخري آهي، تنهنڪري اهو جاء نٿو وٺي (0 بائيٽ). فيلڊ سي 1 بائيٽ تي قبضو ڪري ٿو.
5) K ۽ Z. اڳئين صورت وانگر. K فيلڊ ۾ قدر 1 بائيٽ تي قبضو ڪري ٿو، Z - 0 ۾.
6) I ۽ J. دستاويزن مطابق، ٻئي قدر 2 بائيٽ وٺندا. اسان ڊگھائي حساب ڪريون ٿا فارمولا استعمال ڪندي دستاويزن مان: گول (1 + 0)/2) +1 = 1 + 1 = 2.
7) J ۽ X. J فيلڊ ۾ قيمت 2 بائيٽ وٺي ويندي، ايڪس فيلڊ ۾ قيمت 2 بائيٽ وٺندي.

مجموعي طور تي، صحيح اختيار آهن: C ۽ K، I ۽ J، J ۽ X.

T_I انڊيڪس جو ڪلسٽرنگ فيڪٽر لڳ ڀڳ ڇا ٿيندو؟

create table t (i integer);
 
insert into t select rownum from dual connect by level <= 10000;
 
create index t_i on t(i);

  • اٽڪل ڏهن
  • اٽڪل سوين
  • اٽڪل ھزارين
  • اٽڪل ڏهه هزار

جواب ڏيوOracle دستاويزن جي مطابق (12.1 مان حوالو ڏنو ويو):

B-tree index لاءِ، انڊيڪس ڪلسٽرنگ فيڪٽر انڊيڪس قدر جي سلسلي ۾ قطارن جي فزيڪل گروپنگ کي ماپي ٿو.

انڊيڪس ڪلسٽرنگ فيڪٽر اصلاح ڪندڙ کي اهو فيصلو ڪرڻ ۾ مدد ڪري ٿو ته ڇا هڪ انڊيڪس اسڪين يا مڪمل ٽيبل اسڪين خاص سوالن لاءِ وڌيڪ ڪارائتو آهي). ھڪڙو گھٽ ڪلسترنگ عنصر ھڪڙي موثر انڊيڪس اسڪين کي اشارو ڪري ٿو.

هڪ ڪلسترنگ عنصر جيڪو ٽيبل ۾ بلاڪن جي تعداد جي ويجهو هوندو آهي اهو ظاهر ڪري ٿو ته قطارون جسماني طور تي ترتيب ڏنل آهن ٽيبل بلاڪ ۾ انڊيڪس ڪي. جيڪڏهن ڊيٽابيس هڪ مڪمل ٽيبل اسڪين انجام ڏئي ٿي، ته پوءِ ڊيٽابيس قطارن کي ٻيهر حاصل ڪرڻ جي ڪوشش ڪندو آهي جيئن اهي ڊسڪ تي ذخيرو ٿيل آهن انڊيڪس ڪيئي جي ترتيب سان. هڪ ڪلسٽرنگ عنصر جيڪو قطارن جي تعداد جي ويجهو آهي اهو ظاهر ڪري ٿو ته قطار بي ترتيب طور تي ڊيٽابيس بلاڪ جي وچ ۾ انڊيڪس ڪي جي سلسلي ۾ پکڙيل آهن. جيڪڏهن ڊيٽابيس هڪ مڪمل ٽيبل اسڪين انجام ڏئي ٿي، ته پوءِ ڊيٽابيس هن انڊيڪس ڪيچ ذريعي ڪنهن به ترتيب ڏنل آرڊر ۾ قطارون ٻيهر حاصل نه ڪندي.

انهي حالت ۾، ڊيٽا مثالي طور تي ترتيب ڏنل آهي، تنهنڪري ڪلسترنگ عنصر ٽيبل ۾ قبضو ڪيل بلاڪ جي تعداد جي برابر يا ويجهو هوندو. 8 ڪلو بائيٽ جي معياري بلاڪ سائيز لاءِ، توھان اميد ڪري سگھوٿا ته اٽڪل ھزار تنگ نمبر ويل ھڪ بلاڪ ۾ ٺھي ويندا، تنھنڪري بلاڪن جو تعداد، ۽ نتيجي طور، ڪلسترنگ فيڪٽر ٿيندو. ڏهن بابت.

N جي ڪھڙي قدرن تي ھيٺين اسڪرپٽ کي معياري سيٽنگن سان باقاعده ڊيٽابيس ۾ ڪاميابي سان عمل ڪيو ويندو؟

create table t (
    a varchar2(N char),
    b varchar2(N char),
    c varchar2(N char),
    d varchar2(N char));
 
create index t_i on t (a, b, c, d);

  • 100
  • 200
  • 400
  • 800
  • 1600
  • 3200
  • 6400

جواب ڏيوOracle دستاويزن جي مطابق (11.2 مان حوالو ڏنو ويو):

منطقي ڊيٽابيس جون حدون

جي غيرموجودگي سبب
حد جو قسم
حد قدر

Indexes
انڊيڪس ڪيل ڪالمن جي ڪل سائيز
75٪ ڊيٽابيس جي بلاڪ سائيز مائنس ڪجهه مٿي

اهڙيء طرح، انگن اکرن جي ڪل سائيز 6Kb کان وڌيڪ نه هجڻ گهرجي. اڳتي ڇا ٿئي ٿو ان تي منحصر آهي چونڊيل بنيادي انڪوڊنگ. AL32UTF8 انڪوڊنگ لاءِ، ھڪڙو اکر وڌ ۾ وڌ 4 بائيٽ تي قبضو ڪري سگھي ٿو، تنھنڪري بدترين صورت حال ۾، اٽڪل 6 اکر 1500 ڪلو بائيٽ ۾ فٽ ٿيندا. تنهن ڪري، Oracle N = 400 تي انڊيڪس ٺاھڻ جي اجازت نه ڏيندو (جڏھن سڀ کان وڌيڪ خراب ڪيس جي ڊيگهه 1600 اکرن * 4 بائيٽ + قطار جي ڊيگهه آھي)، جڏھن ته تي N = 200 (يا گهٽ) انڊيڪس ٺاهڻ بغير بغير ڪم ڪندو.

INSERT آپريٽر APPEND اشاري سان ٺهيل آهي ڊيٽا کي سڌو موڊ ۾ لوڊ ڪرڻ لاءِ. ڇا ٿيندو جيڪڏهن اهو ٽيبل تي لاڳو ٿئي ٿو جنهن تي ٽريگر ٽنگيل آهي؟

  • ڊيٽا سڌو موڊ ۾ لوڊ ڪيو ويندو، ٽرڪ ڪم ڪندو جيئن توقع ڪئي وئي
  • ڊيٽا سڌو موڊ ۾ لوڊ ڪيو ويندو، پر ٽرگر تي عمل نه ڪيو ويندو
  • ڊيٽا کي روايتي موڊ ۾ لوڊ ڪيو ويندو، ٽرڪ ڪم ڪندو جيئن ان کي گهرجي
  • ڊيٽا کي روايتي موڊ ۾ لوڊ ڪيو ويندو، پر ٽرگر تي عمل نه ڪيو ويندو
  • ڊيٽا لوڊ نه ڪيو ويندو، هڪ غلطي رڪارڊ ڪئي ويندي

جواب ڏيوبنيادي طور تي، هي منطق جو وڌيڪ سوال آهي. صحيح جواب ڳولڻ لاء، آئون هيٺين دليلن جي نموني جي صلاح ڏيندس:

  1. سڌو موڊ ۾ داخل ٿيڻ هڪ ڊيٽا بلاڪ جي سڌي ٺهڻ سان، SQL انجڻ کي پاس ڪندي، جيڪا تيز رفتار کي يقيني بڻائي ٿي. اهڙيء طرح، ٽرگر جي عمل کي يقيني بڻائڻ تمام ڏکيو آهي، جيڪڏهن ناممڪن ناهي، ۽ ان ۾ ڪو به مقصد ناهي، ڇو ته اهو اڃا تائين بنيادي طور تي داخل ٿيڻ کي سست ڪندو.
  2. ٽريگر تي عمل ڪرڻ ۾ ناڪامي حقيقت کي ڏسندي ته، جيڪڏهن جدول ۾ ڊيٽا ساڳي آهي، ڊيٽابيس جي حالت مجموعي طور تي (ٻيون جدول) ان موڊ تي منحصر هوندي جنهن ۾ هي ڊيٽا داخل ڪئي وئي هئي. اهو واضح طور تي ڊيٽا جي سالميت کي تباهه ڪندو ۽ پيداوار ۾ حل جي طور تي لاڳو نٿو ڪري سگهجي.
  3. گهربل آپريشن کي انجام ڏيڻ جي ناڪامي کي عام طور تي هڪ غلطي سمجهيو ويندو آهي. پر هتي اسان کي ياد رکڻ گهرجي ته APPEND هڪ اشارو آهي، ۽ اشارن جو عام منطق اهو آهي ته جيڪڏهن ممڪن هجي ته انهن کي حساب ۾ ورتو وڃي، پر جيڪڏهن نه، آپريٽر کي اشارو کي حساب ۾ رکڻ کان سواءِ عمل ڪيو ويندو آهي.

تنهنڪري متوقع جواب آهي ڊيٽا کي عام (SQL) موڊ ۾ لوڊ ڪيو ويندو، ٽرڪ فائر ڪندو.

Oracle دستاويزن جي مطابق (8.04 مان حوالو ڏنو ويو):

پابندين جي ڀڃڪڙي بيان کي سيريل طور تي عمل ڪرڻ جو سبب بڻائيندو، روايتي داخل ڪرڻ واري رستي کي استعمال ڪندي، بغير خبردارين يا غلطي پيغامن جي. هڪ استثنا بيانن تي پابندي آهي جيڪو هڪ ٽرانزيڪشن ۾ هڪ کان وڌيڪ ڀيرا ساڳئي ٽيبل تائين رسائي ڪري ٿو، جيڪو غلط پيغامن جو سبب بڻجي سگهي ٿو.
مثال طور، جيڪڏهن ٽريگرز يا حوالن جي سالميت ٽيبل تي موجود آهن، ته پوءِ APPEND اشارو نظر انداز ڪيو ويندو جڏهن توهان استعمال ڪرڻ جي ڪوشش ڪندا direct-load INSERT (سيريل يا متوازي)، ۽ گڏوگڏ PARALLEL اشارو يا شق، جيڪڏهن ڪو آهي.

ڇا ٿيندو جڏهن هيٺين اسڪرپٽ تي عمل ڪيو ويندو؟

create table t(i integer not null primary key, j integer references t);
 
create trigger t_a_i after insert on t for each row
declare
    pragma autonomous_transaction;
begin
    insert into t values (:new.i + 1, :new.i);
    commit;
end;
/
 
insert into t values (1, null);

  • ڪامياب عملدرآمد
  • نحوي غلطي جي ڪري ناڪامي
  • غلطي: خودمختيار ٽرانزيڪشن صحيح ناهي
  • وڌ ۾ وڌ ڪال nesting کان وڌڻ سان لاڳاپيل نقص
  • پرڏيهي ڪنجي خلاف ورزي جي غلطي
  • تالا سان لاڳاپيل نقص

جواب ڏيوٽيبل ۽ ٽرگر بلڪل صحيح طور تي ٺاهيا ويا آهن ۽ هي آپريشن مسئلا پيدا نه ٿيڻ گهرجي. خود مختيار ٽرانزيڪشن کي ٽرڪ ۾ پڻ اجازت آهي، ٻي صورت ۾ لاگنگ ممڪن نه هوندي، مثال طور.

پهرين قطار داخل ڪرڻ کان پوء، هڪ ڪامياب ٽريگر فائرنگ جي نتيجي ۾ ٻي قطار داخل ٿيڻ جو سبب بڻجندي، ٽريگر کي ٻيهر فائر ڪرڻ، ٽين قطار داخل ڪرڻ، ۽ ائين ئي جيستائين بيان ڪالن جي وڌ کان وڌ nesting کان وڌڻ سبب ناڪام ٿي. بهرحال، هڪ ٻيو ذيلي نقطو راند ۾ اچي ٿو. وقت تي ٽريگر تي عمل ڪيو ويو آهي، واعدو اڃا تائين مڪمل نه ڪيو ويو آهي پهرين داخل ٿيل رڪارڊ لاء. تنهن ڪري، هڪ خود مختيار ٽرانزيڪشن ۾ هلندڙ ٽرگر ٽيبل ۾ هڪ قطار داخل ڪرڻ جي ڪوشش ڪري ٿو جيڪو هڪ غير ملڪي ڪيئي رڪارڊ ڏانهن اشارو ڪري ٿو جيڪو اڃا تائين انجام نه ڏنو ويو آهي. اهو نتيجو هڪ انتظار ۾ آهي (خودمختيار ٽرانزيڪشن انتظار ڪري ٿو مکيه ٽرانزيڪشن جو انتظار ڪرڻ لاء اهو ڏسڻ لاء ته اهو ڊيٽا داخل ڪري سگهي ٿو) ۽ ساڳئي وقت مکيه ٽرانزيڪشن انتظار ڪري ٿو خودمختيار ٽرانزيڪشن کي ٽرڪ کان پوء ڪم جاري رکڻ لاء. هڪ تعطل پيدا ٿئي ٿو ۽ نتيجي طور، خود مختيار ٽرانزيڪشن کي منسوخ ڪيو ويو آهي لاڪ سان لاڳاپيل سببن جي ڪري.

صرف رجسٽرڊ استعمال ڪندڙ سروي ۾ حصو وٺي سگهن ٿا. سائن ان ڪريو، توهان جي مهرباني.

اهو ڏکيو هو؟

  • ٻن آڱرين وانگر، مون فوري طور تي سڀ ڪجهه صحيح طور تي فيصلو ڪيو.

  • واقعي نه، مان ڪجهه سوالن تي غلط هو.

  • مون ان جو اڌ صحيح حل ڪيو.

  • مون ٻه ڀيرا جواب ڏنو!

  • مان تبصرن ۾ لکندس

14 صارفين ووٽ ڏنو. 10 استعمال ڪندڙن کي روڪيو ويو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو