მოთხოვნა იყენებს ორაკლის სხვადასხვა გეგმებს. Oracle SQL Developer-ში Execute Explain Plan-ის შედეგების გააზრება. შესრულების გეგმის მიმოხილვა

5 პასუხი

EXPLAIN PLAN გამომავალი არის გამართვის გამომავალი Oracle Query Optimizer-დან. COST არის ხარჯების ოპტიმიზატორის (CBO) საბოლოო შედეგი, რომლის მიზანია აირჩიოს რომელი კომპლექტიდან შესაძლო გეგმებიუნდა იქნას გამოყენებული მოთხოვნის დასაწყებად. CBO ითვლის ფარდობით ღირებულებას თითოეული გეგმისთვის, შემდეგ ირჩევს გეგმას ყველაზე დაბალი ღირებულებით.

(შენიშვნა: ზოგიერთ შემთხვევაში CBO-ს არ აქვს საკმარისი დრო ყველა შესაძლო გეგმის შესაფასებლად, ამ შემთხვევაში ის უბრალოდ ირჩევს გეგმას აქამდე ნაპოვნი ყველაზე დაბალი ღირებულებით)

საერთო ჯამში, ერთ-ერთი ყველაზე დიდი წვლილი ნელი მოთხოვნაარის მოთხოვნის შესასრულებლად წაკითხული მწკრივების რაოდენობა (უფრო ზუსტად, ბლოკები), ამიტომ ღირებულება ნაწილობრივ დაფუძნებული იქნება იმ მწკრივების რაოდენობაზე, რომლის წაკითხვაც ოპტიმიზატორის შეფასებით დასჭირდება.

მაგალითად, ვთქვათ, გაქვთ შემდეგი შეკითხვა:

SELECT emp_id FROM თანამშრომლებისგან სად_მომსახურების_ თვე = 6;

(თვეების_მომსახურების სვეტს აქვს NOT NULL შეზღუდვა და რეგულარული ინდექსი მასზე.)

არსებობს ორი ძირითადი გეგმა, რომელიც ოპტიმიზატორს შეუძლია აირჩიოს აქედან:

  • გეგმა 1: წაიკითხეთ ყველა სტრიქონი "თანამშრომლების" ცხრილიდან, თითოეულისთვის შეამოწმეთ არის თუ არა პრედიკატი ჭეშმარიტი (მომსახურების_ თვე=6).
  • გეგმა 2: წაიკითხეთ ინდექსი, სადაც months_of_service=6 (ეს იწვევს ROWID-ების კომპლექტს), შემდეგ შედით ცხრილში დაბრუნებული ROWID-ების საფუძველზე.

დავუშვათ, რომ ცხრილი „თანამშრომლები“ ​​შეიცავს 1 000 000 (1 მილიონი) სტრიქონს. მოდით წარმოვიდგინოთ, რომ თვეების_მომსახურების მნიშვნელობები მერყეობს 1-დან 12-მდე და რატომღაც საკმაოდ თანაბრად არის განაწილებული.

ფასი გეგმა 1, რომელიც მოიცავს FULL SCAN-ს, დაჯდება თანამშრომლების ცხრილის ყველა მწკრივის წაკითხვა, რაც დაახლოებით 1,000,000-ია; მაგრამ რადგან Oracle-ს ხშირად შეუძლია წაიკითხოს ბლოკები მრავალბლოკიანი წაკითხვის გამოყენებით, რეალური ღირებულება უფრო დაბალი იქნება (დამოკიდებულია თქვენი მონაცემთა ბაზის კონფიგურაციის მიხედვით) - მაგალითად, ვთქვათ, რამდენიმე ბლოკის მქონე ნიმუშების რაოდენობა არის 10 - სრულის სავარაუდო ღირებულება სკანირება იქნება 1,000,000/10; მთლიანი ღირებულება = 100000.

ფასი გეგმა 2, რომელიც მოიცავს ინდექსის დიაპაზონის სკანირებას და ცხრილის ძიებას ROWID-ის მიერ, ეღირება ინდექსის სკანირება, ისევე როგორც ცხრილზე წვდომის ღირებულება ROWID-ის გამოყენებით. მე არ განვიხილავ რა დაჯდება დიაპაზონის ინდექსის სკანირება, მაგრამ წარმოვიდგინოთ, რომ დიაპაზონის ინდექსის სკანირების ღირებულება არის 1 მწკრივზე; ჩვენ ველით, რომ ვიპოვოთ მატჩი 1-დან 12-ჯერ, ასე რომ, ინდექსის სკანირების ღირებულებაა 1,000,000/12 = 83,333; პლუს ცხრილის წვდომის ღირებულება (დავუშვათ 1 ბლოკის წაკითხვა თითო წვდომაზე, ჩვენ არ შეგვიძლია გამოვიყენოთ მრავალ ბლოკის წაკითხვა აქ) = 83.333; საერთო ღირებულება = 166666.

როგორც ხედავთ, გეგმის ღირებულებაა 1 ( სრული სკანირება) ნაკლებია გეგმის 2-ის ღირებულებაზე (ინდექსის შემოწმება + წვდომა rowid) - ეს ნიშნავს, რომ CBO შეარჩევს FULL სკანირებას.

თუ ოპტიმიზატორის მიერ აქ გაკეთებული ვარაუდები სწორია, მაშინ სინამდვილეში გეგმა 1 იქნება სასურველი და ბევრად უფრო ეფექტური ვიდრე გეგმა 2 - რაც უარყოფს მითს, რომ სრული სკანირება "ყოველთვის ცუდია".

შედეგები სრულიად განსხვავებული იქნებოდა, თუ ოპტიმიზატორის სამიზნე იქნებოდა FIRST_ROWS(n) ALL_ROWS-ის ნაცვლად - ამ შემთხვევაში ოპტიმიზატორს ურჩევნია გეგმა 2, რადგან ის ხშირად აბრუნებდა პირველ რამდენიმე სტრიქონს უფრო სწრაფად, მთელი შეკითხვისთვის ნაკლებად ეფექტური. .

CBO აშენებს გადაწყვეტილების ხეს, აფასებს თითოეულის ხარჯებს შესაძლო გზაშესრულება, ხელმისაწვდომია თითოეული მოთხოვნისთვის. ხარჯები დაყენებულია ინსტანციაზე დაყენებული CPU_cost ან I/O_cost პარამეტრით. და CBO აფასებს ღირებულებას, როგორც შეუძლია, არსებული ცხრილებისა და ინდექსების სტატისტიკით, რომლებიც გამოყენებული იქნება მოთხოვნაში. თქვენ არ უნდა დააკონფიგურიროთ თქვენი მოთხოვნა მხოლოდ ღირებულების მიხედვით. ღირებულება საშუალებას გაძლევთ გაიგოთ, რატომ აკეთებს ოპტიმიზატორი რასაც აკეთებს. ღირებულების გარეშე, თქვენ გესმით, რატომ აირჩია ოპტიმიზატორმა გეგმა, რომელიც მან გააკეთა. მეტი დაბალი ფასიარ ნიშნავს უფრო სწრაფ მოთხოვნას. არის დრო, როცა ეს მართალია და იქნება დრო, როცა არასწორია. ღირებულება ეფუძნება თქვენს სტატისტიკურ ცხრილს და თუ ისინი არასწორია, ღირებულება არასწორი იქნება.

მოთხოვნის დაყენებისას, თქვენ უნდა გაითვალისწინოთ თითოეული ნაბიჯის კარდინალურობა და მწკრივების რაოდენობა. აზრი აქვთ? ოპტიმიზატორი სწორად ითვლება? სტრიქონები სწორად დაბრუნდა? თუ ინფორმაცია არასწორად არის წარმოდგენილი, მაშინ დიდი ალბათობით ოპტიმიზატორს არ აქვს შესაბამისი ინფორმაცია, რომელიც საჭიროა გადაწყვეტილების მისაღებად. სწორი გადაწყვეტილება. ეს შეიძლება გამოწვეული იყოს ცხრილში და ინდექსში მოძველებული ან გამოტოვებული სტატისტიკით, ასევე Cpu-ს სტატისტიკით. უმჯობესია განაახლოთ სტატისტიკა თქვენი მოთხოვნის კონფიგურაციისას, რათა მაქსიმალურად მიიღოთ ოპტიმიზატორი. თქვენი მიკროსქემის ცოდნა ასევე ბევრს ეხმარება დაყენებაში. იმის ცოდნა, თუ როდის აირჩია ოპტიმიზატორმა ნამდვილად ცუდი გადაწყვეტილებადა მიუთითა მასზე სწორი გზამცირე მინიშნებით, შეგიძლიათ დაზოგოთ დრო.

თქვენი ნახსენები "FULL" მიგვანიშნებს, რომ მოთხოვნა აკეთებს სრულ ეკრანზე სკანირებას თქვენი მონაცემების საპოვნელად. ზოგიერთ შემთხვევაში ეს კარგია, წინააღმდეგ შემთხვევაში ეს არის ცუდი ინდექსირების/შეკითხვის ჩანაწერის მაჩვენებელი.

როგორც ზოგადი წესი, თქვენ გინდათ, რომ თქვენს შეკითხვაზე გამოიყენოს გასაღებები, რათა Oracle-მა შეძლოს თქვენთვის საჭირო მონაცემების პოვნა მწკრივების მცირე რაოდენობის წვდომით. საბოლოო ჯამში, თქვენ ოდესმე შეძლებთ თქვენი მაგიდების არქიტექტურაზე წვდომას. თუ ხარჯები ძალიან მაღალი რჩება, შეიძლება დაგჭირდეთ ფიქრი იმაზე, თუ როგორ დააკონფიგურიროთ თქვენი მიკროსქემის დიზაინი უკეთესი მუშაობისთვის.

Ბოლო დროს Oracle-ის ვერსიები COST წარმოადგენს დროს, როდესაც ოპტიმიზატორი ელოდება შეკითხვას, გამოხატული დროის ერთეულებში, რომელიც სჭირდება ერთი ბლოკის წაკითხვას.

ასე რომ, თუ ერთი ბლოკის წაკითხვას 2 ms სჭირდება და ღირებულება გამოიხატება როგორც "250", მოთხოვნას შეიძლება დასჭირდეს 500 ms.

ოპტიმიზატორი ითვლის ღირებულებას ერთბლოკიანი და მრავალბლოკიანი წაკითხვის სავარაუდო რაოდენობაზე, ასევე გეგმის CPU მოხმარებაზე დაყრდნობით. ეს უკანასკნელი შეიძლება იყოს ძალიან სასარგებლო ხარჯების მინიმიზაციისთვის გარკვეული ოპერაციების შესრულებით სხვების წინაშე, რათა თავიდან აიცილოთ CPU მაღალი ხარჯები.

ეს აჩენს კითხვას, თუ როგორ იცის ოპტიმიზატორმა რამდენი ხანი სჭირდება ოპერაციების დასრულებას. უახლესი ვერსიები Oracle საშუალებას გაძლევთ შექმნათ "სისტემის სტატისტიკის" კოლექციები, რომლებიც, რა თქმა უნდა, არ უნდა აგვერიოთ ცხრილის ან ინდექსის სტატისტიკაში. სისტემის სტატისტიკა არის შესრულების გაზომვები აპარატურა, ძირითადად მნიშვნელოვანია:

  • რამდენი დრო სჭირდება ერთი ბლოკის წაკითხვას.
  • რამდენ ხანს სჭირდება მრავალამოცანა კითხვას?
  • რამდენად დიდია მულტიბლოკის წაკითხვა (ხშირად განსხვავდება შესაძლო მაქსიმუმისგან იმის გამო, რომ ცხრილის ზომა მაქსიმალურ მნიშვნელობაზე ნაკლებია და სხვა მიზეზების გამო).
  • CPU შესრულება

ეს რიცხვები შეიძლება მნიშვნელოვნად განსხვავდებოდეს სისტემის ოპერაციული გარემოდან გამომდინარე, და სხვადასხვა სტატისტიკის შენახვა შესაძლებელია "დღის OLTP" ოპერაციებისთვის და "ღამის პერიოდული ანგარიშგების" ოპერაციებისთვის და თუ გსურთ "თვიანი მოხსენებისთვის".

სტატისტიკის ამ ნაკრების გათვალისწინებით, ამ გეგმასმოთხოვნის შევსება შეიძლება შეფასდეს სხვადასხვა ღირებულებით საოპერაციო გარემო, რამაც შეიძლება ხელი შეუწყოს ცხრილის სრული სკანირების გამოყენებას რამდენჯერმე ან ინდექსის სკანირების სხვა შემთხვევებში.

ღირებულება არ არის სრულყოფილი, მაგრამ ოპტიმიზატორი აუმჯობესებს თვითკონტროლს ყოველი გამოშვებით და შეუძლია უპასუხოს რეალურ ღირებულებას სავარაუდო ღირებულებასთან შედარებით უკეთესი გადაწყვეტილებების მისაღებად მომავალში. ის ასევე ართულებს პროგნოზირებას.

გაითვალისწინეთ, რომ ღირებულება არ არის აუცილებლად კედლის დრო, რადგან პარალელური შეკითხვის ოპერაციები მოიხმარს მთლიან დროს მრავალ ძაფზე.

Oracle-ის ძველ ვერსიებში CPU-ის ოპერაციების ღირებულება იგნორირებული იყო და ერთჯერადი და მრავალბლოკიანი წაკითხვის შედარებითი ღირებულება ეფექტურად გამოსწორდა საწყისი პარამეტრების მიხედვით.

თქვენ ასევე შეგიძლიათ მოითხოვოთ v $sql და v $session, რომ მიიღოთ სტატისტიკა SQL განცხადებების შესახებ, და ამას ექნება დეტალური მეტრიკა ყველა სახის რესურსისთვის, დროისა და შესრულებისთვის.

ნება მომეცით დაუყოვნებლივ განვმარტო, რომ მე აღვწერ უფასო პროგრამის გამოყენების მაგალითს OraDeveloper Studio. რატომ? იმის გამო, რომ ამის გაკეთება ჩვეულებრივი კითხვებით შეუძლებელი იყო და ამის გარკვევის დრო და სურვილი არ იყო, რადგან უფრო მარტივი გზა არსებობს. 😉

მაშ, ეს რისთვის არის? მე აგიწერთ კონკრეტული მაგალითი, რის გამოც იძულებული გავხდი ოპტიმიზაცია გამეკეთებინა.

ამოცანაა მონაცემთა ბაზაში ათობით ათასი მწკრივის ჩატვირთვა. თითოეული მწკრივისთვის, თქვენ ჯერ უნდა იპოვოთ დამატებითი მონაცემები მონაცემთა ბაზაში ერთი საკმაოდ რთული მოთხოვნით (4 ცხრილი შეერთების გზით).
პრობლემა ის არის, რომ 15 ათასი რიგის ჩატვირთვას 8-9 საათი სჭირდება. ვინაიდან, დავალების პირობების მიხედვით, საჭიროა მისი ხშირად ჩატვირთვა და არა ხუთ წელიწადში ერთხელ... ზოგადად, დრო უნდა მივიყვანოთ მისაღებ დონეზე.

Რა გავაკეთე?
1. გავარკვიე, რომ სწორედ სელექტი ნელდება (მონაცემები ჩასმული და განახლებულია ცხრილებში, სადაც არის რამდენიმე სტრიქონი და ზოგიერთ ცხრილს არც ინდექსები აქვს და არც კლავიშები - აქედან გამომდინარეობს ეჭვი შერჩევის შეცდომის შესახებ) .
2. შეამოწმა ინდექსების არსებობა მოთხოვნით გამოყენებულ ველებზე. დაემატა დაკარგული.
3. დახმარება სთხოვა მათ, ვინც იცოდა. 🙂

მცოდნეებმა გვირჩიეს შეკითხვის შესრულების გეგმის გაანალიზება და განგვიმარტეს, როგორ გავაკეთოთ ეს OraDev-ში.
შექმენით ახალი შეკითხვის ფანჯარა (Ctrl+N). ჩვენ ვაკოპირებთ მასში ჩვენს მოთხოვნას. დააჭირეთ Alt+G. აირჩიეთ არსებული ან შექმენით ერთი ახალი მაგიდაგეგმა.
შესრულების შემდეგ გამოჩნდება შესრულების გეგმის ხე. დამოუკიდებლად და ნახევარი ლიტრის გარეშე ამის გარკვევა არც ისე ადვილია. 😉

რა გვაინტერესებს ამ ხეზე? ჩვენ გვაინტერესებს კვანძები (ნაბიჯები), რომლებზეც მითითებულია ნაბიჯის დიდი ღირებულება. თქვენ შეგიძლიათ ნახოთ ნაბიჯის ფასი საფეხურის თვისებებში (მე მაქვს თვისებების ფანჯარა ყოველთვის ღია და ამიტომ მჭირდება მხოლოდ არჩევა სწორი ნაბიჯი; შესაძლოა დაგჭირდეთ თვისებების არჩევა საფეხურზე მაუსის მარჯვენა ღილაკით). ჩვენ ვეძებთ ნელ ნაბიჯს (ჩვენ არ ვითვალისწინებთ ყველაზე მაღალ კვანძს, გეგმის ხის ფესვს - მოთხოვნის მთლიანი ფასი იქ იქნება მითითებული და უკვე ვიცით, რომ პრობლემა ამ მოთხოვნაშია). იპოვე? ახლა ჩვენ ვუყურებთ რომელ ცხრილს, რომელ ველებს და რამდენ სტრიქონში მუშაობს ნაბიჯი - ეს არის ნაბიჯის თვისებებში და სახელში. ვუყურებთ და ვფიქრობთ, რატომ არის აქ ასე ნელი?
მაგალითად, ერთ-ერთი ნაბიჯი მუშაობდა 4000 ჩანაწერით ერთი ან სამი ჩანაწერის ნაცვლად (არა ათასობით). ეს პრინციპში არ უნდა მომხდარიყო - მე ვზღუდავ ნიმუშს ზუსტად იმისთვის, რომ ავირჩიო საჭირო დიაპაზონიდან და არა არასაჭირო ნაგვის გროვიდან. შეერთების მდგომარეობას კარგად რომ დავაკვირდი, შევამჩნიე, რომ ერთ-ერთი ველი გამოვტოვე. თხოვნას ველი დავამატე და ყველაფერი თავის ადგილზე დადგა. მოთხოვნის ფასი (სრული) 531-დან 6-მდე შემცირდა. :)

მადლობა ამხანაგების ბუდე და აღმოაჩინოს მათი დახმარება.

P.S. ბოდიშს გიხდით ეკრანის ანაბეჭდების არ ჩართვისთვის. მათთან ბევრად უფრო გასაგები იქნებოდა, მაგრამ... ზოგიერთი ინფორმაციის კონფიდენციალურობის გამო 80% უნდა გაჟღენთილიყო და ისევ გაუგებარი იქნებოდა.
P.P.S. სულ დროჩამოტვირთვები მნიშვნელოვნად შემცირდა. მონაცემთა ბაზაში 17,5 ათასი მწკრივის ჩატვირთვას 12 წუთი დასჭირდა. 8-9 საათთან შედარებით... ისე, შენ თვითონ უკვე მიხვდი ყველაფერს. 😉

Oracle Database 11g Performance Tuning.

როგორ წავიკითხოთ შეკითხვის გეგმები

რა არის შესრულების გეგმა?

შესრულების გეგმა არის ოპტიმიზატორის გამოსავალი, რომელიც ინტერპრეტირებულია შესრულების ძრავის ენაზე. ის ავალებს შესრულების ძრავას იმ ოპერაციების შესახებ, რომლებიც უნდა შესრულდეს გამოსახულებით მოთხოვნილი მონაცემების რაც შეიძლება სწრაფად და ეფექტურად მისაღებად.

EXPLAIN PLAN გამოხატულება აღწერს ოპტიმიზატორის მიერ არჩეულ შესრულების გეგმას ისეთი გამონათქვამების შესასრულებლად, როგორიცაა SELECT, UPDATE, DELETE და INSERT. შესრულების გეგმის საფეხურები არ სრულდება იმ თანმიმდევრობით, როგორც ეს მითითებულია გეგმაში. ნაბიჯებს შორის არის მშობლისა და შვილის ურთიერთობა. წყაროს სიმებიანი ხე არის შესრულების გეგმის საფუძველი. იგი შეიცავს შემდეგ ინფორმაციას:

  • განცხადებაში მითითებული ცხრილების დახარისხება
  • წვდომის მეთოდი განცხადებაში მითითებული თითოეული ცხრილისთვის
  • შეერთების მეთოდი ცხრილებისთვის, რომელსაც იყენებენ შეერთების ოპერატორები გამოხატულებაში
  • მონაცემთა ოპერაციები, როგორიცაა ფილტრი, დახარისხება ან აგრეგაცია
წყაროს რიგის ხის გარდა (ან მონაცემთა ნაკადის ხე პარალელურ ოპერაციებში), გეგმის ცხრილი შეიცავს შემდეგ მონაცემებს:
  • ოპტიმიზაციის მონაცემები, როგორიცაა თითოეული ოპერაციის ღირებულება და კარდინალურობა
  • დანაყოფის მონაცემები, როგორიცაა დანაყოფების ნაკრები
  • კონკურენტულობის მონაცემები, როგორიცაა შეერთების ოპერაციის განაწილების მეთოდი
EXPLAIN PLAN-ის შედეგები დაგეხმარებათ განსაზღვროთ, ირჩევს თუ არა ოპტიმიზატორი კონკრეტული შესრულების გეგმას, როგორიცაა წყობილი მარყუჟების გამოყენება.


სად ვიპოვო შესრულების გეგმები?

მონაცემთა ბაზაში გამონათქვამების შესრულების გეგმების მოპოვების მრავალი გზა არსებობს, ყველაზე პოპულარული ჩამოთვლილია ქვემოთ:

  • EXPLAIN PLAN ბრძანება საშუალებას გაძლევთ ნახოთ შესრულების გეგმა, რომელიც ოპტიმიზატორს შეუძლია გამოიყენოს გამოხატვის შესასრულებლად. ეს ბრძანება ძალიან სასარგებლოა, რადგან ის აყალიბებს შესრულების გეგმას და წერს მას ცხრილში სახელწოდებით PLAN_TABLE SQL განცხადების შენახვის გარეშე.
  • V$SQL_PLAN უზრუნველყოფს კურსორების შესრულების გეგმების ნახვის შესაძლებლობას, რომლებიც ახლახან შესრულდა. V$SQL_LAN-ში შენახული ინფორმაცია ძალიან ჰგავს EXPLAIN PLAN ბრძანებით წარმოებულ ინფორმაციას. თუმცა, Explain Plan აჩვენებს პოტენციურ შესრულების გეგმას და V$SQL_PLAN ინახავს უკვე შესრულებული მოთხოვნების გეგმებს.
  • V$SQL_PLAN_MONITOR შეიცავს გეგმის დონის მონიტორინგის სტატისტიკას V$SQL_MONITOR-ში ნაპოვნი თითოეული SQL განცხადებისთვის. V$SQL_PLAN_MONITOR-ში შემავალი თითოეული ხაზი შეესაბამება კონკრეტული შესრულების გეგმის ოპერაციას.
  • AWR ჩარჩო და Statspack მაღაზიის შესრულების გეგმები ყველაზე ხშირად უწოდებენ SQL-ს. გეგმები განთავსებულია dBA_HIST_SQL_PLAN ან STATS$SQL_PLAN ხედში.
  • შესრულების გეგმები და მწკრივების წყაროები ასევე იწერება DBMS_MONITOR-ის მიერ გენერირებული ფაილების გასაკონტროლებლად.
  • SQL მართვის ბაზა არის მონაცემთა ლექსიკონის ნაწილი, რომელიც ინახება SYSAUX ცხრილის სივრცეში. ჟურნალის ინფორმაცია ოპერაციების შესახებ, შესრულების გეგმების ისტორია და მითითების ხაზები ინახება აქ, ისევე როგორც პროფილები SQL განცხადებებისთვის.
  • დიაგნოსტიკური ღონისძიება 10053, რომელიც გამოიყენება ხარჯების ოპტიმიზატორის გამოთვლების ჩასაწერად, ასევე შეუძლია შეკითხვის შესრულების გეგმების გენერირება.
  • 10.2 ვერსიიდან მოყოლებული, როდესაც თქვენ გადააგდებთ პროცესის მდგომარეობას, შესრულების გეგმა ასევე შედის გენერირებულ კვალის ფაილში.

შესრულების გეგმების ნახვა

თუ თქვენ აწარმოებთ EXPLAIN PLAN ბრძანებას SQL*Plus-ში, შეგიძლიათ აირჩიოთ მონაცემები PLAN_TABLE ცხრილიდან და ნახოთ გენერირებული შესრულების გეგმები. ყველაზე მარტივი გზითშესრულების გეგმის ნახვა არის DBMS_XPLAIN პაკეტის გამოყენება. DBMS_XPLAIN პაკეტი შეიცავს ხუთ შესაძლო ფუნქციას:

  • DISPLAY: გამოიყენება შესრულების გეგმის ფორმატირებული გამოსავლისთვის.
  • DISPLAY_AWR: გამოიყენება ფორმატირებული გეგმის გამოსატანად SQL შესრულება AWR საცავში შენახული გამონათქვამები.
  • DISPLAY_CURSOR: გამოიყენება ნებისმიერი დატვირთული კურსორიდან შესრულების გეგმის ფორმატირებული გამოსასვლელად
  • DISPLAY_SQL_PLAN_BASELINE: გამოიყენება ერთი ან მეტი შესრულების გეგმის ფორმატირებული გამოსასვლელად SQL განცხადებებისთვის, რომლებიც იდენტიფიცირებულია სათაურებით.
  • DISPLAY_SQLSET: გამოიყენება SQL Tuning ნაკრებში შენახული შესრულების გეგმის ფორმატირებული გამოსასვლელად.
DBMS_XPLAIN პაკეტის გამოყენების უპირატესობა ის არის, რომ ის საშუალებას გაძლევთ ნახოთ SQL განცხადების გაფორმებული შესრულების გეგმა, წყაროს მიუხედავად.

EXPLAIN PLAN ბრძანება

  • EXPLAIN PLAN ბრძანება გამოიყენება შეკითხვის შესრულების გეგმის შესაქმნელად.
  • გეგმის გენერირების შემდეგ, მისი ნახვა შესაძლებელია PLAN_TABLE ცხრილიდან ინფორმაციის მოთხოვნით

PLAN TABLE იქმნება ავტომატურად, როგორც გლობალური დროებითი ცხრილი, რომელიც შემდგომში გამოიყენება ყველა მომხმარებლის მიერ შესრულების გეგმების შესანახად. თქვენ შეგიძლიათ შექმნათ თქვენი საკუთარი PLAN TABLE სკრიპტის გამოყენებით $ORACLE_HOME/rdbms/admin/utlxplan.sql თუ საჭიროა შესრულების გეგმების გრძელვადიანი შენახვა.


განმარტეთ PLAN ბრძანების სტრუქტურა


EXPLAIN PLAN ბრძანება ათავსებს მწკრივს PLAN TABLE-ში შესრულების გეგმის თითოეული საფეხურისთვის.

EXPLAIN PLAN ბრძანების მაგალითი

ეს ბრძანებაჩასვამს გამოხატვის შესრულების გეგმას PLAN TABLE-ში და ამატებს demo01 ტეგს შემდგომი მითითებისთვის.

შესრულების გეგმის მისაღებად მრავალი გზა არსებობს. ზემოთ მოყვანილი მეთოდი იყენებს EXPLAIN PLAN ბრძანებას. ეს ბრძანება წარმოქმნის SQL განცხადების შესრულების გეგმას მისი შესრულების გარეშე და ათავსებს შედეგს PLAN TABLE-ში. PLAN TABLE წარმოადგენს ხის სტრუქტურას, რომლითაც შეგიძლიათ დააბრუნოთ გამოხატვის შესრულების გეგმა ID და PARENT_ID სვეტების და CONNECT BY პუნქტის გამოყენებით SELECT გამოხატულება.

PLAN TABLE-ის შიგთავსის გამოტანა


ზემოთ მოყვანილი მაგალითი იყენებს ALL კლავიშს DBMS_XPLAIN.DISPLAY ფუნქციისთვის, რომელიც საშუალებას გაძლევთ ნახოთ ყველა ხელმისაწვდომი ინფორმაცია PLAN TABLE-ში შენახული შესრულების გეგმის შესახებ. ეს დასკვნაგარდა სტანდარტული ინფორმაციისა, შეიცავს Დამატებითი ინფორმაციაროგორიცაა PROJECTION, ALIAS და დისტანციური SQL ინფორმაცია, თუ ოპერაცია განაწილებულია.

გამომავალი ინფორმაციის უფრო ზუსტად გასაკონტროლებლად, შეიძლება გამოყენებულ იქნას შემდეგი ძირითადი პარამეტრები. თითოეული საკვანძო სიტყვაამატებს ცალკეულ ბლოკს PLAN TABLE ინფორმაციის გამოსავალზე. საკვანძო სიტყვები უნდა გამოიყოს მძიმით ან ინტერვალით:

  • ROWS, საჭიროების შემთხვევაში, აჩვენებს ოპტიმიზატორის მიერ მოსალოდნელი მწკრივების რაოდენობას.
  • ROWS, საჭიროების შემთხვევაში, აჩვენებს ოპტიმიზატორის მიერ მოსალოდნელი ბაიტების რაოდენობას.
  • ღირებულება საჭიროების შემთხვევაში, აჩვენებს ღირებულებას,სავარაუდოდ გამოითვლება ოპტიმიზატორის მიერ
  • დაყოფა საჭიროების შემთხვევაში, აჩვენებს ოპტიმიზატორის მიერ პატრიციონის გადაგდებას
  • PARALLEL ან არის შესაბამისი, აჩვენებს PX ინფორმაციას (მეთოდიინფორმაციის განაწილება და ინფორმაცია ცხრილის წვდომის რიგების შესახებ)
  • პრედიკატიან მიზანშეწონილია, აჩვენებს ინფორმაციას პრედიკატის შესახებ
  • PROJECTION ან არის ეს მიზანშეწონილი, აჩვენებს განყოფილებასპროგნოზები

Explain Plan-ის გამოყენება SQL Developer-ში

AUTOTRACE

როცა გამოხატულებაშესრულებული SQL*Plus-ში ან SQL Developer-ში შეგიძლიათ ავტომატურად მიიღოთ შესრულების გეგმა და გამოხატვის შესრულების სტატისტიკა. ანგარიში ავტომატურად გენერირდება ნებისმიერი ტიპის ოპერაციების შესრულების შემდეგ, როგორიცაა SELECT, INSERT, UPDATE და DELETE. Ეს ინფორმაციაშეიძლება გამოყენებულ იქნას SQL განცხადებების მუშაობის დიაგნოსტიკისა და რეგულირებისთვის.

AUTOTRACE-ის გამოსაყენებლად, მონაცემთა ბაზაში უნდა შეიქმნას PLAN TABLE და მომხმარებელს, რომელიც ასრულებს AUTOTRACE-ს, უნდა მიენიჭოს PLUSTRACE როლი. როლიPLUSTRACE იქმნება და გაიცემა DBA როლზე სკრიპტის გამოყენებით$ORACLE_HOME/sqlplus/admin/plustrce.sql


სინტაქსი AUTOTRACE

თქვენ შეგიძლიათ შეასრულოთ Autotrace ზემოთ ნახაზზე ნაჩვენები სინტაქსის გამოყენებით. შემდეგი პარამეტრები ასევე ხელმისაწვდომია გამოსაყენებლად:

  • OFF გამორთავს მიკვლევის გამოყენებას
  • ON ჩართავს ავტომატური მარშრუტის გამოყენებას
  • TRACE რთავს ავტომატურ მიკვლევას და თრგუნავს SQL გამომავალს
  • EXPLAIN აჩვენებს შესრულების გეგმას, მაგრამ არ აჩვენებს სტატისტიკას
  • სტატისტიკა აჩვენებს სტატისტიკას შესრულების გეგმის გარეშე

AUTOTRACE-ის გამოყენების მაგალითები




AUTOTRACE: სტატისტიკა


გამონათქვამის შესრულებისას სერვერის მიერ ჩაწერილი სტატისტიკა ასახავს მოცულობას სისტემის რესურსები, იხარჯება გამოხატვის შესრულებაზე და მოიცავს შემდეგ ძირითად ინდიკატორებს:

  • რეკურსიული ზარები- კლიენტისა და სერვერის მხრიდან წარმოქმნილი რეკურსიული ზარების რაოდენობა ინახავს ცხრილებს, რომლებიც გამოიყენება შიდა დამუშავებისთვის. როდესაც Oracle Database-ს სჭირდება ცვლილებების შეტანა ამ ცხრილებში, ის წარმოქმნის შიდა SQL განცხადებას, რომელიც თავის მხრივ წარმოქმნის რეკურსიულ ზარს.
  • db ბლოკი იღებს- რამდენჯერ არის მოთხოვნილი CURRENT ბლოკი
  • თანმიმდევრული იღებს- რამდენჯერ არის მოთხოვნილი მონაცემთა ბლოკების ინტეგრალური წაკითხვის ოპერაცია.
  • ფიზიკური კითხულობს- დისკიდან წაკითხული მონაცემთა ბლოკების რაოდენობა. ეს რიცხვი წარმოადგენს მნიშვნელობების ჯამს ფიზიკური კითხულობს პირდაპირ და ყველა იკითხება ბუფერიდანქეში.
  • ზომის შეცვლა- გენერირებული გადაკეთებების საერთო რაოდენობა ბლოკებში
  • ბაიტები SQL*Net-ით გაგზავნილი კლიენტისთვის- ფონური პროცესიდან კლიენტზე გადაცემული ბაიტების საერთო რაოდენობა.
  • ბაიტები მიღებული SQL*Net-ით კლიენტისგან- Oracle*Net კლიენტისგან მიღებული ბაიტების საერთო რაოდენობა
  • SQL*Net ორმხრივი მოგზაურობები კლიენტიდან/კლიენტიდან- კლიენტისგან გაგზავნილი და მიღებული Oracle NET შეტყობინებების საერთო რაოდენობა.
  • დახარისხება (მეხსიერება)- დახარისხების ოპერაციების რაოდენობა, რომლებიც წარმატებით დასრულდა მეხსიერებაში და არ მოითხოვდა დისკზე ჩაწერას.
  • დახარისხება (დისკი)- დახარისხების ოპერაციების რაოდენობა, რომლებიც მოითხოვდნენ მინიმუმ ერთ ოპერაციას დისკზე.
  • მწკრივი დამუშავებულია- ოპერაციის დროს დამუშავებული რიგების რაოდენობა.

db_block_getsაჩვენებს მონაცემთა ბაზიდან მიმდინარე ბლოკის წაკითხვის ოპერაციებს. თანმიმდევრული იღებს- ეს არის ბლოკის წაკითხვის ოპერაციები, რომლებიც უნდა აკმაყოფილებდეს კონკრეტული ნომერი SCN. ფიზიკური კითხულობსაჩვენებს ბლოკების წაკითხვას დისკიდან. db_block_getsდა თანმიმდევრული იღებს- სტატისტიკური მაჩვენებლები, რომლებიც მუდმივად კონტროლდება. ისინი დაბალი უნდა იყოს მოძიებული რიგების რაოდენობასთან შედარებით. დახარისხება ხდება მეხსიერებაში და არა დისკზე.

AUTO TRACE SQL*Developer-ის გამოყენებით


V$SQL_PLAN-ის ნახვა

ეს ხედი აჩვენებს კურსორების შესრულების გეგმებს, რომლებიც ჯერ კიდევ ბიბლიოთეკის ქეშშია. ამ ხედში შენახული ინფორმაცია მრავალი თვალსაზრისით წააგავს PLAN TABLE-ის ინფორმაციას. თუმცა, V$SQL_PLAN შეიცავს უკვე შესრულებული გამონათქვამების შესრულების გეგმებს. EXPLAIN PLAN-ის მიერ შემუშავებული შესრულების გეგმა შეიძლება განსხვავდებოდეს კურსორში შენახული ფაქტობრივი შესრულების გეგმისგან. ეს იმიტომ ხდება, რომ სესიის პარამეტრები და BIND ცვლადის მნიშვნელობები შეიძლება განსხვავდებოდეს მიმდინარე მნიშვნელობებისგან.

კიდევ ერთი სასარგებლო ხედვა: V$SQL_PLAN_STATISTICSრომელიც იძლევა თითოეული ქეშირებული კურსორის შესრულების გეგმაში თითოეული ოპერაციის შესრულების სტატისტიკას. კიდევ ერთი სასარგებლო იდეა V$SQL_PLAN_STATISTIC_ALLაერთიანებს აღსრულების ინფორმაციას V$SQL_PLAN_STATISTICSდა V$SQL_WORKAREA შენახული შესრულების გეგმით V$SQL_PLAN.


V$SQL_PLAN ხედის ძირითადი სვეტების აღწერა


ხედი შეიცავს იგივე სვეტებს, როგორც PLAN TABLE და რამდენიმე დამატებით სვეტს. სვეტები, რომლებიც წარმოდგენილია PLAN TABLE-ში და აქვთ იგივე მნიშვნელობები:

  • მისამართი
  • HASH_VALUE

PLAN_HASH_VALUE არის სვეტი, რომელიც შეიცავს რიცხვითი წარმოდგენადაგეგმეთ SQL გამოხატულება კურსორისთვის. PLAN_HASH_VALUE სვეტის მნიშვნელობების შედარებით, შეგიძლიათ სწრაფად დაადგინოთ, იცვლება თუ არა იგივე გამონათქვამის შესრულების გეგმა მათი მწკრივის მიხედვით შედარების გარეშე.

V$SQL_PLAN_STATISTICS-ის ნახვა

V$SQL_PLAN_STATISTICS ხედი უზრუნველყოფს მიმდინარე სტატისტიკაშესრულების გეგმაში თითოეული ოპერაციისთვის, როგორიცაა დამუშავებული რიგების რაოდენობა ან შესრულების დრო. ყველა სტატისტიკა, გარდა რიგების რაოდენობისა, დაგროვილია. მაგალითად, ცხრილის შეერთების სტატისტიკა შეიძლება შეიცავდეს ცხრილის შეერთების 3 ოპერაციას. V$SQL_PLAN_STATISTICS-ში შენახული სტატისტიკა ხელმისაწვდომია კურსორებისთვის, რომლებიც შედგენილია ინიციალიზაციის პარამეტრით STATISTICS_LEVEL = ALL ან GATHER_PLAN_STATISTICS ოპტიმიზატორის მინიშნების გამოყენებით.

V$SQL_STATISTICS_ALL ხედი შეიცავს მეხსიერების მოხმარების სტატისტიკას ყველა წყაროს მწკრივებისთვის, რომლებიც იყენებდნენ SQL მეხსიერებას (დახარისხება ან HASH შეერთება ეს ხედი აერთიანებს V$SQL_PLAN ხედში შენახულ ინფორმაციას V$SQL_PLAN_STATISTICS და V$SQL_WORKAREA ხედის შესრულების სტატისტიკასთან). .

ურთიერთობები შესრულების მნიშვნელოვან დინამიურ შეხედულებებს შორის



V$SQLAREAაჩვენებს სტატისტიკას გაზიარებული SQL სფეროებისთვის და შეიცავს თითო სტრიქონს SQL სტრიქონებიგამონათქვამები. ეს ხედი იძლევა სტატისტიკას SQL განცხადებებზე, რომლებიც უკვე გაანალიზებულია, მეხსიერებაშია და მზადაა შესასრულებლად:

  • SQL_ID- მშობელი კურსორის SQL იდენტიფიკატორი ბიბლიოთეკის ქეშში
  • VERSION_COUNTბავშვის კურსორების რაოდენობა, რომლებიც იმყოფება ქეშში მოცემული მშობლის კურსორისთვის

V$SQLინახავს სტატისტიკას გაზიარებულ SQL უბნებზე და შეიცავს ერთ რიგს თითოეული SQL გამოხატვისთვის, რომელიც წარმოიშვა მშობელი SQL გამონათქვამიდან:

  • მისამართიწარმოადგენს კურსორის სათაურის მისამართს მოცემული კურსორისთვის
  • HASH_VALUE-მშობელი გამოხატვის მნიშვნელობა ბიბლიოთეკის ქეშში
  • SQL_ID- მშობელი კურსორის SQL იდენტიფიკატორი ბიბლიოთეკის ქეშში
  • PLAN_HASH_VALUE- SQL გეგმის რიცხვითი წარმოდგენა მოცემული კურსორისთვის
  • CHILD_NUMBER- ბავშვის კურსორის ნომერი

V$SQL-ში შენახული სტატისტიკა განახლდება SQL განცხადებების შესრულებისას. თუმცა, ხანგრძლივი გამონათქვამებისთვის, ხედის ინფორმაცია განახლდება ყოველ ხუთ წამში. ეს შესაძლებელს ხდის შეაფასოს გრძელვადიანი მოთხოვნების შესრულებაზე გავლენა მათი გაშვებისას.

V$SQL_PLANშეიცავს აღსრულების გეგმის ინფორმაციას ბიბლიოთეკის ქეშში ჩატვირთული თითოეული ბავშვის კურსორის შესახებ. Სვეტები მისამართი, HASH_VALUEდა CHILD_NUMBERშეიძლება გამოყენებულ იქნას დასაკავშირებლად V$SQLბავშვის კურსორების შემდგომი განმარტებისთვის.


V$SQL_PLAN_სტატისტიკაუზრუნველყოფს წყაროს მწკრივის დონის შესრულების სტატისტიკას თითოეული ბავშვის კურსორისთვის.Სვეტები მისამართი, HASH_VALUE შეიძლება გამოყენებულ იქნას ხედთან შერწყმა V$SQLAREAმშობლის დასადგენადკურსორი.Სვეტები მისამართი, HASH_VALUEდა CHILD_NUMBERშეიძლება გამოყენებულ იქნას დასაკავშირებლადV$SQLბავშვის კურსორის განსაზღვრა.

V$SQL_PLAN_STATISTICS_ALL შეიცავს მეხსიერების მოხმარების სტატისტიკას ყველა წყაროს მწკრივებისთვის, რომლებიც იყენებდნენ SQL მეხსიერებას (დახარისხება ან HASH შეერთება) ეს ხედი აგროვებს ხედში შენახულ ინფორმაციას V$SQL_PLANშესრულების სტატისტიკით ხედებიდან V$SQL_PLAN_STATISTICSდა V$SQL_WORKAREA.

V$SQL_WORKAREAაწვდის სტატისტიკას პროცესში ჩართული სამუშაო სფეროების შესახებ SQL მუშაობაგამონათქვამები. თითოეულ SQL განცხადებას, რომელიც შენახულია საერთო აუზში, აქვს ერთი ან მეტი საბავშვო კურსორი, რომლის შესახებ ინფორმაცია ინახება V$SQL. V$SQL_WORKAREAშეიცავს ინფორმაციას ყველა სამუშაო ადგილის შესახებ, რომელიც საჭიროა ამ საბავშვო კურსორებისთვის.

V$SQL_WORKAREAშეუძლია დაკავშირება V$SQLAREA (ADDRESS, HASH_VALUE)და თან V$SQL ( ADDRESS, HASH_VALUE,CHILD_NUMBER).

გამოყენება ამ პრეზენტაციასშეგიძლიათ მიიღოთ პასუხები შემდეგ კითხვებზე:

  • ტოპ 10 სამუშაო სფერო, რომელიც ყველაზე მეტს მოითხოვსრაოდენობამეხსიერება ქეშისთვის
  • სამუშაო ადგილებისთვის, რომლებიც მუშაობენ AUTO რეჟიმში,სამუშაო ადგილების რამდენ პროცენტს იყენებს მაქსიმალური რაოდენობამეხსიერება?

V$SQLSTATSაჩვენებს SQL კურსორების მუშაობის ძირითად სტატისტიკას, თითოეული მწკრივი წარმოადგენს მონაცემებს, რომელიც აერთიანებს SQL გამოხატვის ტექსტს და SQL-ის შესრულების გეგმას (კომბინაცია SQL_IDდა PLAN_HASH_VALUE). სვეტები შიგნით V$SQLSTATSიდენტური, V$SQLდა V$SQLAREA. თუმცა, პრეზენტაცია V$SQLSTATSგანსხვავდება V$SQLდა V$SQLAREAდამუშავების სიჩქარე, მასშტაბურობა, მონაცემთა შენახვის ხანგრძლივი პერიოდი (სტატისტიკური მონაცემების შენახვა შესაძლებელია ხედში, მაშინაც კი, როცა კურსორი გამოასახლეს საერთო აუზიდან).

მონაცემების მოთხოვნის მაგალითი V$SQL_PLAN ხედიდან


თქვენ შეგიძლიათ მოითხოვოთ მონაცემები ხედიდან V$SQL_PLANფუნქციის გამოყენებით DBMS_XPLAIN.DISPLAY_CURSOR()მიმდინარე ან ბოლო შესრულებული გამოხატვის ჩვენება (როგორც ნაჩვენებია მაგალითში). შეგიძლიათ გადასცეთ მნიშვნელობა SQL_IDროგორც პარამეტრი მოცემული გამოხატვის შესრულების გეგმის მისაღებად. SQL_ID - SQL_IDგამონათქვამები ინახება კურსორის ქეშში. Შენ შეგიძლია მიიღო შესაბამისი ღირებულებაინფორმაციის მოთხოვნა სვეტიდან SQL_IDV$SQLდა V$SQLAREA. ალტერნატიულად, შეგიძლიათ აირჩიოთ PREV_SQL_IDკონკრეტული სესიისთვის V$SESSION. ნაგულისხმევად, ეს პარამეტრი არ არის მითითებული, ამ შემთხვევაში ნაჩვენებია ბოლო შესრულებულ კურსორში შენახული გეგმა.

  • IOSTATS: თუ ვივარაუდებთ, რომ SQL შესრულების პროცესი აგროვებს საბაზისო სტატისტიკას შესრულების გეგმებისთვის, STATISTICS_LEVEL დაყენებულია ALL, ან გამოიყენება HINT GATHER_PLAN_STATISTICS), ეს ფორმატი აჩვენებს I/O სტატისტიკას ყველასთვის, როდესაც მიუთითებს ALL (ან მხოლოდ ბოლო, როდესაც მითითებულია LAST) კურსორის აღსრულებები.
  • MEMSTATS: თუ ვივარაუდებთ, რომ გამოყენებულია ავტომატური PGA მენეჯმენტი (pga_aggregate_target დაყენებულია არანულოვან მნიშვნელობაზე), ეს ფორმატი საშუალებას გაძლევთ აჩვენოთ მეხსიერების გამოყენების სტატისტიკა ამ ტიპისსტატისტიკა გამოიყენება მხოლოდ მეხსიერების ინტენსიური ოპერაციებისთვის, როგორიცაა HASH Join, დახარისხება ან ზოგიერთი bitmap ოპერატორი.
  • ALLSTATS: სინონიმი "IOSTATS MEMSTATS"
  • ბოლო: ნაგულისხმევად, შესრულების გეგმის სტატისტიკა ნაჩვენებია კურსორის ყველა შესრულებისთვის. ბოლო საკვანძო სიტყვის გამოყენებით, შეგიძლიათ ნახოთ გეგმის სტატისტიკა, რომელიც გენერირებული იყო მისი ბოლო შესრულების შემდეგ.

მნიშვნელოვანი AWR ხედები

თქვენ შეგიძლიათ ნახოთ AWR მონაცემები Enterprise Manager-ში ან AWR ანგარიშის გენერირებით, ასევე შეგიძლიათ დამატებით წვდომა დინამიური შესრულების ხედებზე, რომლებიც ინახავს AWR მონაცემებს:

  • V$ACTIVE_SESSION_HISTORY- ეს ხედი აჩვენებს ინფორმაციას უახლესი სესიის აქტივობის შესახებ, რომელიც განახლდება ყოველ წამში.
  • V$ მეტრიკული ხედები წარმოადგენენ მეტრულ მონაცემებს სისტემის მუშაობის თვალყურის დევნებისთვის. მეტრიკის ნახვების სიის ნახვა შესაძლებელია V$METRICGROUP ხედზე წვდომით.
  • DBA_HIST ხედები შეიცავს მონაცემთა ბაზაში შენახულ ისტორიულ მონაცემებს. შეხედულებების ამ ჯგუფში შედის:
  1. DBA_HIST_ACTIVE_SESS_HISTORYშეიცავს მეხსიერებიდან შერჩეულ ისტორიის შინაარსს აქტიური სესიასისტემის ბოლო აქტივობით
  2. DBA_HIST_BASELINEშეიცავს ინფორმაციას მონაცემთა ბაზაში შენახული საცნობარო ხაზების შესახებ.
  3. DBA_HIST_DATABASE_INSTANCEშეიცავს ინფორმაციას მონაცემთა ბაზის გარემოს შესახებ
  4. DBA_HIST_SNAPSHOTშეიცავს ინფორმაციას სისტემაში შენახული სნეპშოტების შესახებ
  5. DBA_HIST_SQL_PLANშეიცავს ინფორმაციას შესრულების გეგმების შესახებ
  6. DBA_HIST_WR_CONTROLშეიცავს ინფორმაციას AWR პარამეტრების შესახებ
მონაცემების მოთხოვნა AWR-დან


კონკრეტული ანგარიშების გენერირებაSQLAWR საცავიდან


SQL მონიტორინგი


ხელსაწყო SQL მონიტორინგიხელმისაწვდომია ნაგულისხმევად, როდესაც ეს ვარიანტია STATISTICS_LEVELდააყენეთ მნიშვნელობა ᲢᲘᲞᲘᲣᲠᲘან ყველა. Გამოყენებისთვის ამ ინსტრუმენტისთქვენ ასევე უნდა დააყენოთ პარამეტრის მნიშვნელობა CONTROL_MANAGEMENT_PACK_ACCESSმნიშვნელობით DIAGNOSTIC+TUNINGდიაგნოსტიკური და კონფიგურაციის პაკეტის გასააქტიურებლად.

ნაგულისხმევად, SQL მონიტორინგი ჩართულია ავტომატურად, როდესაც SQL განცხადება შესრულებულია პარალელურად ან როდესაც ის მოიხმარს CPU ან I/O დროს ხუთ წამზე მეტს ერთი შესრულების დროს.

არსებობს ორი ოპტიმიზატორის მინიშნება, რომ ცალსახად ჩართოთ ან გამორთოთ SQL მონიტორინგი გამოხატვისთვის - მონიტორიდა NO_MONITOR.

თქვენ შეგიძლიათ თვალყური ადევნოთ SQL განცხადების შესრულების სტატისტიკას ხედების გამოყენებით V$SQL_MONITORდა V$SQL_PLAN_MONITOR.

SQL Statement Monitoring-ის გააქტიურების შემდეგ Dynamic Performance View-ში V$SQL_MONITORამატებს ინფორმაციას, რომელიც საჭიროა მუშაობის ძირითადი მეტრიკის თვალყურის დევნებისთვის, როგორიცაა შესრულების დრო, პროცესორის დრო, წაკითხვისა და ჩაწერის რაოდენობა, I/O შეყოვნება და სხვა დაყოვნების მეტრიკა. ეს სტატისტიკაგანახლებულია რეალურ დროში SQL შესრულების დროს, ნაგულისხმევად - ყოველ წამში. შესრულების დასრულების შემდეგ, ინფორმაცია შესრულების შესახებ ინახება ხედში V$SQL_MONITORკიდევ ერთი წუთი, რის შემდეგაც იგი ამოღებულია.

SQL მონიტორინგის ანგარიშის ნიმუში


ეს მაგალითი ვარაუდობს, რომ თქვენ ირჩევთ მონაცემებს SALES ცხრილიდან და აწარმოებთ SQL მონიტორინგს სხვა სესიაზე.

DBMS_SQLTUNE.REPORT_SQL_MONITOR ფუნქციას შეუძლია მიიღოს რამდენიმე პარამეტრი, რომელიც ზღუდავს ან აფართოებს ანგარიშის დეტალების დონეს, დამატებითი პარამეტრების გამოყენებით ასევე შეგიძლიათ მიუთითოთ ანგარიშის გამომავალი ფორმატი (TEXT, HTML ან XML), ნაგულისხმევად, ანგარიში გენერირდება ტექსტში. ფორმატი.

ერთი და იგივე SQL განცხადების ორი შესრულების ცალსახად იდენტიფიცირებისთვის, წარმოიქმნება კომპოზიციური გასაღები, რომელსაც ეწოდება შესრულების გასაღები. ეს გასაღები შედგება სამი ატრიბუტისაგან, რომელთაგან თითოეული ეხება სვეტს V$SQL_MONITOR-ში:

  • SQL_ID
  • შინაგანად გენერირებული იდენტიფიკატორი იმის უზრუნველსაყოფად, რომ მოცემული მთავარი გასაღებიარის რეალურად უნიკალური (SQL_EXEC_ID)
  • გამოხატვის შესრულების დაწყების დროის ანაბეჭდი (SQL_EXEC_START)

შესრულების გეგმის ინტერპრეტაცია



დასკვნა ახსენი გეგმაარის შესრულების გეგმის ხის სტრუქტურის ტაბულური წარმოდგენა. თითოეული ნაბიჯი (ხაზი შესრულების გეგმაში ან კვანძი ხეში) წარმოადგენს მწკრივის წყაროს.
მშობლის ქვეშ მყოფი კვანძების რიგი გვიჩვენებს კვანძების შესრულების თანმიმდევრობას ამ დონეზე. თუ ორი ნაბიჯი ერთსა და იმავე დონეზეა, პირველ რიგში შესრულდება პირველი რიგი.
ხის ფორმატში, ფოთლები მარცხნივ ხის თითოეულ დონეზე განსაზღვრავს იმ წერტილს, საიდანაც იწყება შესრულება.
შესრულების გეგმის საფეხურები არ სრულდება მათი დანომრვის თანმიმდევრობით. ნაბიჯებს შორის არის მშობლისა და შვილის ურთიერთობა.
PLAN_TABLE-ში და V$SQL_PLAN-ში მნიშვნელოვანი ელემენტებიხის სტრუქტურის მისაღებად არის ID, PARRENT_ID და POSITION სვეტები. Trace ფაილში ეს სვეტები შეესაბამება id, pid და pos ველებს, შესაბამისად.
შესრულების გეგმის წაკითხვის ერთ-ერთი გზაა მისი გადაქცევა გრაფიკად, რომელსაც აქვს ხის სტრუქტურა. შეგიძლიათ დაიწყოთ ზემოდან, ID=1 ჩანაწერი არის ხის ზედა წერტილი. ეს ეხება ოპერაციებს, რომლებსაც აქვთ parrent_id ან pid მნიშვნელობა 1.
გეგმის ხის სახით წარმოსადგენად, გააკეთეთ შემდეგი:

  1. აიღეთ პირადობის მოწმობა ყველაზე მეტად დაბალი ღირებულებადა მოათავსეთ იგი ხის თავზე.
  2. იდენტიფიცირება რიგები, რომლებსაც აქვთ PID (მშობლის ID) ამ მნიშვნელობის ტოლი.
  3. მოათავსეთ ისინი მშობლის ჩანაწერის ქვემოთ ხეში მათი POS მნიშვნელობების მიხედვით ყველაზე დაბალიდან მარცხნიდან მარჯვნივ.
  4. მას შემდეგ, რაც ყველა მშობლის ID მოიძებნება, გადაიტანეთ დონე ქვემოთ მომდევნო ID-ზე და გაიმეორეთ პროცესი, იპოვეთ ახალი რიგები იგივე PID-ით.
პირველი, რაც უნდა განისაზღვროს შესრულების გეგმაში, არის რომელი კვანძი შესრულდება პირველი. ნახატზე ნაჩვენები მეთოდი განმარტავს, თუ როგორ უნდა გავაკეთოთ ეს, მაგრამ ზოგჯერ რთულ შესრულების გეგმებში ძნელია ამის გაკეთება და ასევე რთულია ყველა ნაბიჯის ბოლომდე შესრულება. რთული გეგმები შემადგენლობით არ განსხვავდება მარტივისგან, გარდა ნაბიჯების რაოდენობისა. იგივე ეხება მათ მარტივი წესები. თქვენ ყოველთვის შეგიძლიათ დამალოთ თქვენს გეგმაში ნაბიჯები, რომლებიც არ მოიხმარენ რესურსების მნიშვნელოვან რაოდენობას.
შესრულების გეგმის ინტერპრეტაციის სტანდარტული მეთოდი:
  1. დაიწყეთ ზემოდან
  2. გადაიტანეთ ოპერაციები, სანამ არ მიაღწევთ ოპერაციებს, რომელიც აწარმოებს მონაცემებს, მაგრამ არაფერს მოიხმარს. ეს არის ოპერაციის დასაწყისი.
  3. შეხედეთ ბავშვის ოპერაციებს, რომლებიც ამ მშობელს აქვს. ბავშვის ოპერაციები ჩატარდება შემდეგნაირად
  4. აწიეთ ხეზე მაღლა, სანამ ყველა ტრანზაქცია არ განიხილება.

შესრულების გეგმის ხის ინტერპრეტაციის სტანდარტული მეთოდია:

  1. დაიწყეთ ზემოდან
  2. იმოძრავეთ ქვემოთ და მარცხნივ ხის გასწვრივ, სანამ არ მიაღწევთ მარცხენა კვანძს, ის ჯერ შესრულებულია
  3. შეხედეთ ამ კვანძის ბავშვებს. ეს ბავშვები შემდგომში დაისაჯებიან.
  4. ბავშვების სიკვდილით დასჯის შემდეგ, მშობლის ოპერაცია გაგრძელდება.
  5. ახლა, ამ ოპერაციისა და მისი ყველა შთამომავლის დასრულების შემდეგ, გადადით ხეზე და შეხედეთ ოპერაციების ორიგინალური სერიის შთამომავლებს და მის მშობლებს. იგი ხორციელდება იმავე პრინციპით.
  6. გადადით ხეზე, სანამ ყველა ტრანზაქცია არ განიხილება

შესრულების გეგმის ინტერპრეტაცია: მაგალითი 1

ზემოთ მოყვანილი სურათი გვიჩვენებს გამოხატვის შესრულების გეგმის ინტერპრეტაციას. ნახატზე ნაჩვენები შეკითხვა ცდილობს იპოვოთ თანამშრომლები, რომელთა ხელფასები განსხვავდება სახელფასო ბადისგან. მოთხოვნა ირჩევს მონაცემებს ორი ცხრილიდან და მოიცავს ქვემოთხოვნას, რომელიც დაფუძნებულია სხვა ცხრილიდან შერჩეულზე, ხელფასის დონის შესამოწმებლად.
მოდით შევხედოთ ამ მოთხოვნის შესრულების ბრძანებას. ამ და წინა ფიგურიდან გამომდინარე, შესრულების ბრძანება იქნება შემდეგი: 3-5-4-2-6-1:

  • 3: გეგმის შესრულება დაიწყება EMP ცხრილის სრული სკანირებით (ID=3)
  • 5: რიგები გადაეცემა საფეხურს, რომელიც აკონტროლებს ჩადგმულ ციკლს (ID=2), რომელიც იყენებს მათ PK_DEPT ინდექსში რიგების მოსაძებნად (ID=5)
  • 4: PK_DEPT სკანირების შემდეგ მიღებული მწკრივების ROWID გამოიყენება DEPT ცხრილიდან დანარჩენი ინფორმაციის მისაღებად (ID=4)
  • 2: ID=2, წყობილი მარყუჟის შერწყმის პროცესი გაგრძელდება მის დასრულებამდე
  • 6: მას შემდეგ, რაც ID=2 დაამუშავებს ყველა წყაროს მწკრივს შეერთებისთვის, შესრულდება ცხრილის SALGRADE (ID=6) სრული სკანირება.
  • 1: ID=6-ის შესრულების შემდეგ მიღებული მონაცემები გამოყენებული იქნება ID=2 და ID=6 რიგების გასაფილტრად
Child პროცესები სრულდება მშობლის პროცესებამდე, თუმცა კავშირის სტრუქტურები უნდა ჩამოყალიბდეს შვილობილი პროცესების შესრულებამდე. ალბათ, შესრულების ბრძანების ახსნის უმარტივესი გზაა ის, რომ NESTED LOOPS შეერთების ოპერაციების შესასრულებლად ID=2-ით, ორმა ბავშვმა (ID=3 და ID=4 (თავიანთ შვილებთან ერთად)) უნდა დაასრულოს მათი შესრულება, სანამ ID=2 იქნება. შესრულებული.

შესრულების გეგმის ინტერპრეტაცია: მაგალითი 2


ეს შეკითხვა აბრუნებს თანამშრომლების სახელებს, დეპარტამენტის სახელებს და მისამართებს, რომელთა განყოფილებები მდებარეობს სიეტლში და რომლებსაც ჰყავთ მენეჯერი.

ფორმატირების სიმარტივისთვის, ფიგურას დაემატა კიდევ ერთი ნუმერაცია. სვეტი მარცხნივ წარმოადგენს ID-ს, ხოლო მარჯვნივ სვეტი წარმოადგენს PID-ს. შეკითხვის შესრულების გეგმა აჩვენებს ორ NESTED LOOP JOIN ოპერაციას. ჩვენ განვიხილავთ შესრულების გეგმას ზემოთ წარმოდგენილი მეთოდის მიხედვით:

  1. დავიწყოთ ზემოდან. ID=0
  2. ჩვენ ვამცირებთ ოპერაციებს, სანამ არ მივაღწევთ ოპერაციებს, რომელიც აწარმოებს მონაცემებს, მაგრამ არაფერს მოიხმარს. IN ამ შემთხვევაში,ID 0,1,2 და 3 მოიხმარს მონაცემებს. ID=4 არის პირველი ოპერაცია ზემოდან, რომელიც არ მოიხმარს რესურსებს, მაგრამ აწარმოებს მონაცემებს. ეს არის პირველი მონაცემთა წყარო. INDEX RANGE SCAN დააბრუნებს მწკრივების ROWID-ს, რომელიც გამოყენებული იქნება LOCATIONS ცხრილიდან მონაცემების დასაბრუნებლად (ID=3)
  3. მოდით შევხედოთ ამ მწკრივის წყაროს ძმებს, რომლებიც იმავე დონეზე არიან, როგორც ხეში. ძმებსა და დებს იმავე დონეზე აქვთ ID=3 და ID=5. ID = 5-ს ჰყავს შვილი - ID = 6, რომელიც შესრულდება მანამდე. ეს არის INDEX RANGE SCAN ოპერაცია სხვა ინდექსზე, რომელიც აბრუნებს ROWID-ს, რომელიც მოგვიანებით გამოყენებული იქნება DEPARTMENTS ცხრილიდან მონაცემების მისაღებად ID=5 შესრულების დროს.
  4. ბავშვის ოპერაციის შესრულების შემდეგ, კონტროლი გადაეცემა მის წინაპარს. შემდეგი ოპერაცია იქნება NESTED LOOPS ID=2-ით ადრე მიღებული მონაცემების გაერთიანებისთვის.
  5. ახლა, როდესაც მშობლის ოპერაცია და მისი ყველა შთამომავალი დასრულდა, ჩვენ ავდივართ ხეზე და ვნახავთ, ჰყავს თუ არა მშობლის ოპერაციას ძმები და დები, რომლებიც მის დონეზე არიან. ID=2 არის იგივე დონეზე, როგორც ოპერაცია ID=7, რომელსაც აქვს ბავშვის ID=8. ჯერ ამ ბავშვს დაისაჯებენ. INDEX UNIQUE SCAN შესრულდება მწკრივების ROWID-ების მისაღებად, რომლებიც შემდეგ გამოყენებული იქნება მონაცემების მისაღებად EMPLOYEES ცხრილიდან ოპერაციაში ID=7.
  6. ჩვენ გადავდივართ უფრო მაღალ დონეზე მას შემდეგ, რაც ყველა ოპერაცია მიმდინარე დონეზე და მათი შთამომავლები დამუშავდება. ბოლო შესასრულებელი ოპერაცია იქნება NESTED LOOPS-ის შერწყმა ID=1-თან, რის შემდეგაც შედეგი გადაეცემა ID=0.
  7. ოპერაციის თანმიმდევრობა ასეთია: 4-3-6-5-2-8-7-1-0

ქვემოთ არის დეტალური აღწერაშესრულების გეგმა:

პირველი, შიდა ჩადგმული მარყუჟი შესრულებულია LOCATIONS-ის გამოყენებით, როგორც წამყვანი ცხრილი, ინდექსის წვდომის გამოყენებით CITY სვეტზე. ოპერაცია მუშაობს, რადგან თქვენ ეძებთ მხოლოდ განყოფილებებს სიეტლში.

შედეგი უერთდება DEPARTMENTS ცხრილში LOCATION_ID სვეტის ინდექსის გამოყენებით შეერთებისთვის. პირველი შეერთების ოპერაციის შედეგი არის მონაცემთა წამყვანი წყარო მეორე ჩადგმული მარყუჟისთვის.

მეორე შეერთების ოპერაცია იკვლევს ინდექსს EMPLOYEE_ID სვეტის EMPLOYEES ცხრილის. ეს ოპერაცია შეიძლება შესრულდეს, რადგან სისტემამ იცის (პირველი შეერთების ოპერაციიდან) სიეტლის ყველა დეპარტამენტის მენეჯერის ID. ამ შემთხვევაში, UNIQUE SCAN შესრულებულია, რადგან სკანირება ხორციელდება პირველადი გასაღების ინდექსზე.

  • პირველი, სისტემა ჰეშირებს T3 ცხრილს მეხსიერებაში (ID=3)
  • შემდეგ სისტემა ჰეშირებს T1 ცხრილს მეხსიერებაში (ID=5)
  • შემდეგ იწყება ცხრილის T2 (ID-6) სკანირება
  • სისტემა იღებს მწკრივს T2-დან და იკვლევს T1-ს (T1.i=T2.i)
  • თუ ხაზი გადარჩება, სისტემა ეძებს მას T3-ში (T1.i=T3.i)
  • თუ რიგი გადარჩება, სისტემა მას გადასცემს შემდეგ ოპერაციას.
  • სისტემის პრობლემები მაქსიმალური მნიშვნელობაშედეგების წინა ნაკრებიდან.
  • შესრულების თანმიმდევრობა ასეთია: 3-5-6-4-2-1

    გაერთიანების ბრძანება: T1-T2-T3

    წაიკითხეთ მეტი ყოვლისმომცველი შესრულების გეგმები


    მარცხნივ ნახატზე ნაჩვენები გეგმა აგებულია მონაცემთა ლექსიკონის მოთხოვნიდან. ეს ძალიან გრძელია, ამიტომ ძალიან რთულია წინა ინტერპრეტაციის მეთოდების გამოყენება პირველი ოპერაციის საპოვნელად.

    თქვენ შეგიძლიათ შეამციროთ მონახაზი, რათა ის უფრო წასაკითხი იყოს. ფიგურა მარჯვნივ გვიჩვენებს იგივე შესრულების გეგმას, მხოლოდ შემოკლებით. როგორც სურათზეა ნაჩვენები, ამის გაკეთება მარტივია Enterprise Manager-ის ან SQL*Developer-ის გამოყენებით. როგორც ნახატზე ჩანს, გეგმა მოიცავს ორი შტოს შერწყმის ოპერაციას. მონაცემთა ლექსიკონის ცოდნა საშუალებას გვაძლევს გავიგოთ, რომ ორი ფილიალი შეესაბამება ლექსიკონის მიერ მართულ და ადგილობრივად მართულ ცხრილებს. მონაცემთა ბაზის შესახებ ცოდნა საშუალებას გაძლევთ გაიგოთ, რომ მონაცემთა ბაზას არ აქვს ლექსიკონის მიერ მართული ცხრილის სივრცეები. ამ გზით, თუ პრობლემაა, ის მეორე ფილიალშია. თქვენი ვარაუდების დასადასტურებლად, თქვენ უნდა გადახედოთ გეგმის ინფორმაციას და შესრულების სტატისტიკას თითოეული რიგის წყაროს, რათა დადგინდეს გეგმის ის ნაწილი, რომელიც მოიხმარს ყველაზე მეტ რესურსს. შემდეგ თქვენ უნდა გააფართოვოთ ფილიალი, რომელშიც პრობლემებია ნაპოვნი. Გამოყენებისთვის ამ მეთოდითთქვენ დამატებით უნდა გამოიყენოთ შესრულების სტატისტიკა, რომელიც შეგიძლიათ იხილოთ V$SQL_PLAN_STATISTICS ხედში ან tkprof ანგარიშში, რომელიც გენერირებულია ტრასის ფაილიდან. მაგალითად, tkprof აჯამებს თითოეულ მშობელი ოპერაციის შესრულებას, პლუს ყველა ბავშვის ოპერაციების შესრულების დროს.

    შესრულების გეგმის მიმოხილვა

    როდესაც თქვენ აყენებთ SQL გამოხატვას OLTP გარემოში, მიზანია დაიწყოთ ცხრილით, რომელსაც აქვს გამოყენებული უმაღლესი სელექციურობის ფილტრი. ეს ნიშნავს, რომ ნაკლები რიგები გადაეცემა შემდეგ ოპერაციას. თუ შემდეგი ნაბიჯი არის შეერთება, ვარაუდობენ, რომ ნაკლები რიგები შეუერთდება. თქვენ ასევე უნდა დარწმუნდეთ, რომ მონაცემთა წვდომის გზები ოპტიმალურია. შესრულების გეგმის შემოწმებისას გაითვალისწინეთ შემდეგი:

    • გეგმა ისეა შემუშავებული, რომ საუკეთესო ფილტრიმიმართა წამყვან მაგიდას
    • შეერთების თანმიმდევრობა შექმნილია ისე, რომ მწკრივების მინიმალური რაოდენობა გადავიდეს შემდეგ ეტაპზე (ანუ, შეერთების ბრძანება უნდა გადავიდეს საუკეთესო ფილტრებზე, რომლებიც ჯერ არ არის გამოყენებული)
    • შეერთების მეთოდი ემთხვევა რიგების რაოდენობას, რომლებიც გადაეცემა მას შესაერთებლად. მაგალითად, NESTED LOOP შეერთება ინდექსის გამოყენებით შეიძლება არ იყოს ოპტიმალური, როდესაც ბევრი მწკრივი დაბრუნდება.
    • ხედები ეფექტურად გამოიყენება. Შეხედე აირჩიეთ სიაიმის დასადგენად, თუ სად არის საჭირო ხედის წვდომა.
    • არ არსებობს მაგიდების დეკარტიული პროდუქტის ოპერაციები (თუნდაც პატარა მაგიდებთან ერთად).
    • თითოეული ცხრილი იკითხება ეფექტურად: განიხილეთ SQL გამონათქვამების პრედიკატები ცხრილის რიგების რაოდენობასთან მიმართებაში. დაათვალიერეთ საეჭვო ოპერაციები დეტალურად, მაგალითად, ცხრილების სრული სკანირება დიდი თანხასტრიქონები, რომლებიც წარმოდგენილია პრედიკატში.

    ცხრილის სრული სკანირება შეიძლება ეფექტურად იქნას გამოყენებული მცირე მაგიდებისთვის, ან შეერთების კონკრეტული ტიპის (როგორიცაა HASH JOIN) გამოსაყენებლად დაბრუნებულ რიგებში.

    თუ რომელიმე ზემოაღნიშნული პირობა არ არის ოპტიმალური, მოგიწევთ SQL-ის გადაწერა ან ცხრილში არსებული ინდექსების გადახედვა.

    თავად შესრულების გეგმა ვერ უზრუნველყოფს ინფორმაციას შეკითხვის შესრულების ეფექტურობის შესახებ. მაგალითად, EXPLAIN PLAN-ის გამომავალმა შეიძლება აჩვენოს ინდექსის გამოყენება, მაგრამ ეს არ ნიშნავს, რომ გამოხატულება ეფექტურია. ზოგჯერ ინდექსის გამოყენება შეიძლება ძალიან არაეფექტური იყოს.

    დადგენისთვის ოპტიმალური გეგმაშესრულება, თქვენ უნდა მიიღოთ საწყისი გეგმა და შემდეგ ოპტიმიზაცია მოახდინოთ უფრო ოპტიმალური შესრულებისთვის ტესტირების გამოყენებით. შესრულების გეგმის შეცვლისას თქვენ უნდა აკონტროლოთ სისტემის რესურსების მოხმარება.

    ეს ჰგავს ფრჩხილს თქვენი საყვარელი ფეხსაცმლის ძირში. შეგიძლიათ სიარული, მაგრამ უფრო და უფრო ხშირად იჭერთ საკუთარ თავს იმის სურვილით, რომ ადგილზე დარჩეთ ან დაავალოთ დავალება სხვებს. მცირე უხერხულობა არა მხოლოდ ანელებს ჩვენს მუშაობას, არამედ ამცირებს მოტივაციას, ხელს უშლის პროცესს და ამცირებს შედეგის ხარისხს. და თუ იპოვნეთ მეგობარი, რომელმაც გასწავლა ჩაქუჩის და ჩაქუჩის აღება ამ ლურსმანში, თქვენ არა მხოლოდ მადლობელი იქნებით მისი დახმარებისთვის, არამედ თავადაც დაეხმარებით სხვებს, გადაარჩენთ მათ უმნიშვნელო, მაგრამ ძალიან შემაწუხებელი დაბრკოლებისგან. სწორედ ამიტომ გჭირდებათ კომუნიკაცია, გააზიაროთ არა მხოლოდ ღრმა და ინტიმური ცოდნა ფორუმებსა და საიტებზე, როგორიცაა Habr, არამედ თქვენი მარტივი ხრიკები და „პატარა ხრიკები“.

    ნებისმიერი ტექსტის მსგავსად, SQL-ში შეკითხვები და პროგრამები შეიძლება შეიქმნას ნებისმიერში ტექსტის რედაქტორი. მაგრამ თუ პროფესიონალი ხართ, ბევრს და ხშირად მუშაობთ SQL-ით, მაშინ სინტაქსის ხაზგასმა და კოდის ავტომატური რეფორმირება საკმარისი აღარ იქნება თქვენთვის, მით უმეტეს, თუ ერთი და იგივე DBMS-ის სხვადასხვა ვერსიას ან სხვადასხვა DBMS პლატფორმას შორის გადართვა მოგიწევთ.

    ცოტა ხნის წინ მოხდა კომუნიკაცია ერთ-ერთ წამყვან პროფესიონალთან Oracle DBMS. მან უამბო ბევრი საინტერესო რამ შეკითხვის შესრულების გეგმებთან მუშაობის შესახებ სხვადასხვა ვერსიებიეს DBMS და არ დააყოვნა ყველას ეთქვა იმ ინსტრუმენტებისა და ტექნიკის შესახებ, რომლებსაც იყენებს და მიეცით რამდენიმე სასარგებლო რჩევა. მის ბლოგზე ვთარგმნე ერთ-ერთი სტატია და მინდა მივიტანო ხაბრავჭანის ყურადღების ცენტრში. იმისდა მიუხედავად, რომ აღწერილი ტექნიკა გამოიყენებოდა Oracle-თან მუშაობისთვის, ახლა წარმატებით ვიყენებ იგივე მიდგომას MS SQL-ისთვის და Sybase-ისთვის.

    გაუშვით შესრულების მოთხოვნა და გამოჩნდება შეკითხვის გეგმის ჩანართი, რომელიც ივსება შესრულების გეგმით.


    გადაიტანეთ მაუსი დიაგრამის რომელიმე კვანძზე და გამოჩნდება დამატებითი სასარგებლო ინფორმაცია, რომელიც დაკავშირებულია ამ შესრულების საფეხურთან შეკითხვის გეგმიდან!
    ნაგულისხმევად, Rapid SQL აჩვენებს შესრულების გეგმას გრაფიკული ფორმა. მე გამოვედი ოპტიმიზაციის ძველი სამყაროდან…. მირჩევნია ტექსტური ვერსია, ამიტომ ვაჭერ მარჯვენა ღილაკიმაუსის ფანჯარაში გეგმით და აირჩიეთ "ტექსტის ნახვა".
    მირჩევნია მოთხოვნის ტექსტი და გეგმა ერთდროულად ვნახო.


    ადვილი გასაკეთებელია. ხედავთ ISQL ფანჯრის ჩანართებს მთავარი ფანჯრის ბოლოში? პირველ რიგში, ჩვენ უნდა დავაკონფიგურიროთ Rapid SQL ისე, რომ მან აჩვენოს გეგმა ცალკე ფანჯარაში.


    დააწკაპუნეთ ოფციების ღილაკზე (მარცხენა წითელი წრე) და შემდეგ დააყენეთ "მიუერთებელი" ვარიანტი შედეგის ფანჯრისთვის. ეს შექმნის ორს ინდივიდუალური სანიშნეები Rapid SQL-ის ბოლოში, შესრულების მოთხოვნის გაშვების შემდეგ. უბრალოდ გადაიტანეთ ეს ფანჯარა ოდნავ ჩანართზე და გამოჩნდება მართკუთხედი, სადაც შეგიძლიათ გადაიტანოთ ეს ფანჯარა.
    ან შეგიძლიათ გამოიყენოთ Tile windows ელემენტი პროგრამის მთავარი მენიუდან

    და კიდევ ერთი რამ: ეს ყველაფერი ასევე მუშაობს DBArtisan-ში - გადაწყვეტა მონაცემთა ბაზის ადმინისტრატორებისთვის.



    გაქვთ შეკითხვები?

    შეატყობინეთ შეცდომას

    ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: