it-swarm-id.com

Seberapa sering statistik Oracle database harus dijalankan?

Dalam pengalaman Anda, seberapa sering statistik Oracle database harus dijalankan? Tim pengembang kami baru-baru ini menemukan bahwa statistik tidak menjalankan kotak produksi kami dalam lebih dari 2 1/2 bulan. Itu kedengarannya lama sekali bagi saya, tapi saya bukan DBA.

21
user290

Di pekerjaan terakhir saya, kami menjalankan statistik sekali seminggu. Jika saya ingat dengan benar, kami menjadwalkannya pada Kamis malam, dan pada hari Jumat, DBA sangat berhati-hati untuk memantau pertanyaan yang paling lama berjalan untuk hal-hal yang tidak terduga. (Jumat dipilih karena sering kali hanya setelah rilis kode, dan cenderung menjadi hari lalu lintas yang cukup rendah.) Ketika mereka melihat permintaan yang buruk, mereka akan menemukan rencana permintaan yang lebih baik dan menyimpannya sehingga tidak akan berubah lagi tanpa terduga . (Oracle memiliki alat untuk melakukan ini untuk Anda secara otomatis, Anda memberi tahu kueri untuk mengoptimalkan dan itu.)

Banyak organisasi menghindari menjalankan statistik karena takut rencana kueri buruk muncul tiba-tiba. Tapi ini biasanya berarti bahwa rencana kueri mereka semakin buruk dari waktu ke waktu. Dan ketika mereka menjalankan statistik maka mereka menghadapi sejumlah masalah. Perebutan yang dihasilkan untuk memperbaiki masalah-masalah itu menegaskan ketakutan mereka tentang bahaya menjalankan statistik. Tetapi jika mereka menjalankan statistik secara teratur, menggunakan alat pemantauan sebagaimana mestinya, dan memperbaiki masalah saat mereka muncul maka mereka akan mengalami lebih sedikit sakit kepala, dan mereka tidak akan menemui mereka sekaligus.

13
user11318

Setiap kali data berubah "secara signifikan".

Jika tabel beralih dari 1 baris ke 200 baris, itu adalah perubahan yang signifikan. Ketika sebuah tabel beralih dari 100.000 baris menjadi 150.000 baris, itu bukan perubahan yang sangat signifikan. Ketika sebuah tabel berpindah dari 1000 baris semua dengan nilai yang identik di kolom X yang biasa dikueri ke 1000 baris dengan nilai yang hampir unik di kolom X, itu adalah perubahan yang signifikan.

Statistik menyimpan informasi tentang jumlah barang dan frekuensi relatif - hal-hal yang akan membuatnya "menebak" berapa banyak baris yang cocok dengan kriteria yang diberikan. Ketika tebakan salah, pengoptimal dapat memilih rencana kueri sangat suboptimal.

13
Jonathan Rupp

Karena statistik Oracle 11g dikumpulkan secara otomatis secara default.

Dua jendela Penjadwal telah ditentukan pada saat pemasangan Oracle Database:

  • WEEKNIGHT_WINDOW dimulai pada pukul 10 malam. dan berakhir pukul 6 pagi setiap hari Senin sampai hari Jumat. 
  • WEEKEND_WINDOW mencakup seluruh hari Sabtu dan Minggu.

Kapan statistik terakhir dikumpulkan?

SELECT owner, table_name, last_analyzed FROM all_tables ORDER BY last_analyzed DESC NULLS LAST; --Tables.
SELECT owner, index_name, last_analyzed FROM all_indexes ORDER BY last_analyzed DESC NULLS LAST; -- Indexes.

Status pengumpulan statistik otomatis?

SELECT * FROM dba_autotask_client WHERE client_name = 'auto optimizer stats collection';

Grup Windows?

SELECT window_group_name, window_name FROM dba_scheduler_wingroup_members;

Jadwal Jendela?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

Kumpulkan Statistik Database secara Manual dalam Skema ini: 

EXEC dbms_stats.gather_schema_stats(ownname=>NULL, cascade=>TRUE); -- cascade=>TRUE means include Table Indexes too.

Kumpulkan Statistik Database secara manual di semua Skema!

-- Probably need to CONNECT / AS SYSDBA
EXEC dbms_stats.gather_database_stats;
13
grokster

Apa versi Oracle yang Anda gunakan? Periksa halaman ini yang merujuk ke Oracle 10:

http://www.acs.ilstu.edu/docs/Oracle/server.101/b10752/stats.htm

Ia mengatakan:

Pendekatan yang disarankan untuk mengumpulkan statistik adalah untuk memungkinkan Oracle mengumpulkan statistik secara otomatis. Oracle mengumpulkan statistik pada semua objek basis data secara otomatis dan memelihara statistik tersebut dalam pekerjaan pemeliharaan terjadwal secara teratur.

5
David Medinets

Dengan Oracle versi 10g dan lebih tinggi, statistik terkini pada tabel dan indeks diperlukan oleh pengoptimal untuk membuat keputusan rencana eksekusi yang "baik". Seberapa sering Anda mengumpulkan statistik adalah panggilan yang sulit. Itu tergantung pada aplikasi Anda, skema, kecepatan data dan praktik bisnis. Beberapa aplikasi pihak ketiga yang ditulis kompatibel dengan versi Oracle yang lebih lama tidak berfungsi dengan baik dengan optimizer baru. Aplikasi tersebut mengharuskan tabel tidak memiliki statistik sehingga resor db kembali ke aturan rencana eksekusi dasar. Tetapi rata-rata Oracle merekomendasikan agar statistik dikumpulkan di atas meja dengan statistik basi. Anda dapat mengatur tabel untuk dipantau dan memeriksa statusnya dan menganalisisnya jika/saat basi. Seringkali itu sudah cukup, kadang tidak. Ini sangat tergantung pada database Anda. Untuk basis data saya, kami memiliki seperangkat tabel OLTP yang memerlukan pengumpulan statistik malam untuk mempertahankan kinerja. Tabel lainnya dianalisis seminggu sekali. Pada database dw besar kami, kami menganalisis seperlunya karena tabel terlalu besar untuk analisis reguler tanpa memengaruhi keseluruhan beban db dan kinerja. Jadi jawaban yang benar adalah, itu tergantung pada aplikasi, perubahan data dan kebutuhan bisnis.

2
MichaelN

Ketika saya mengelola sistem perencanaan multi-pengguna besar yang didukung oleh Oracle, DBA kami memiliki pekerjaan mingguan yang mengumpulkan statistik. Juga, ketika kami meluncurkan perubahan signifikan yang dapat memengaruhi atau dipengaruhi oleh statistik, kami akan memaksa pekerjaan untuk kehabisan siklus untuk menyelesaikan masalah.

2
Joe Skora

Pastikan untuk menyeimbangkan risiko bahwa statistik baru menyebabkan perubahan yang tidak diinginkan pada rencana kueri terhadap risiko yang statistik basi sendiri dapat menyebabkan rencana kueri berubah. 

Bayangkan Anda memiliki basis data bug dengan tabel ISSUE dan kolom CREATE_DATE di mana nilai-nilai dalam kolom bertambah kurang lebih monoton. Sekarang, asumsikan ada histogram pada kolom ini yang memberitahu Oracle bahwa nilai-nilai untuk kolom ini terdistribusi secara seragam antara 1 Januari 2008 dan 17 September 2008. Hal ini memungkinkan pengoptimal untuk secara wajar memperkirakan jumlah baris yang akan dikembalikan jika Anda mencari semua masalah yang dibuat minggu lalu (yaitu 7 - 13 September). Namun, jika aplikasi terus digunakan dan statistik tidak pernah diperbarui, histogram ini akan semakin kurang akurat. Jadi pengoptimal akan mengharapkan pertanyaan untuk "masalah yang dibuat minggu lalu" menjadi kurang dan kurang akurat dari waktu ke waktu dan pada akhirnya dapat menyebabkan Oracle mengubah rencana kueri secara negatif. 

1
Justin Cave

Secara umum tidak disarankan untuk mengumpulkan statistik begitu sering pada seluruh basis data kecuali Anda memiliki justifikasi kuat untuk itu, seperti penyisipan massal atau perubahan data besar sering terjadi pada basis data . Mengumpulkan statistik pada basis data dalam frekuensi ini MUNGKIN berubah rencana eksekusi kueri ke rencana eksekusi buruk yang baru, masalahnya mungkin menghabiskan banyak waktu untuk mencoba menyetel setiap kueri yang dipengaruhi oleh rencana buruk yang baru, inilah mengapa Anda harus menguji dampak pengumpulan statistik baru pada basis data pengujian, atau jika Anda tidak punya waktu atau tenaga pria untuk itu, setidaknya Anda harus menyimpan rencana mundur dengan membuat cadangan statika asli sebelum Anda mengumpulkan yang baru, jadi jika Anda mengumpulkan statistik baru dan kemudian kueri tidak melakukan seperti yang diharapkan, Anda dapat dengan mudah mengembalikan statistik asli.

Ada skrip yang sangat berguna yang dapat membantu Anda membuat cadangan statistik asli dan mengumpulkan yang baru dan memberi Anda perintah SQL yang dapat Anda gunakan untuk mengembalikan kembali statika asli jika hal tersebut tidak berjalan seperti yang diharapkan setelah mengumpulkan statistik baru. Anda dapat menemukan skrip di tautan ini: http://dba-tips.blogspot.com/2014/09/script-to-ease-gathering-statistics-on.html

0
Chion

Dalam kasus sistem tipe gudang data, Anda dapat mempertimbangkan untuk tidak mengumpulkan statistik sama sekali, dan mengandalkan pengambilan sampel dinamis (mengatur optimizer_dynamic_sampling ke level 2 atau lebih tinggi).

0
David Aldridge