it-swarm-tr.com

Oracle veritabanı istatistikleri ne sıklıkla çalıştırılmalıdır?

Deneyimlerinize göre, Oracle veritabanı istatistikleri ne sıklıkla çalıştırılmalıdır? Geliştiriciler ekibimiz kısa süre önce istatistiklerin 2 1/2 ay boyunca üretim kutumuzu çalıştırmadığını keşfetti. Bana uzun zaman oldu gibi geliyor ama ben bir DBA değilim.

21
user290

Son işimde, haftada bir kez istatistikler yaptık. Doğru hatırlıyorsam, onları bir Perşembe gecesi ayarladık ve Cuma günü DBA'lar beklenmedik bir şey için en uzun süren sorguları izlemeye çok dikkat ettiler. (Cuma, çoğu zaman bir kod açıklamasından hemen sonra seçildi ve oldukça düşük bir trafik günü olma eğilimindeydi.) Kötü bir sorgu gördüklerinde daha iyi bir sorgu planı bulur ve bunu beklenmedik bir şekilde tekrar değişmeyecek şekilde kaydeder . (Oracle, bunu sizin için otomatik olarak yapacak araçlara sahiptir, sorguyu en iyi duruma getirmesini istediğinizi söylersiniz.)

Birçok kuruluş, beklenmedik şekilde ortaya çıkan kötü sorgu planları korkusuyla istatistikleri çalıştırmaktan kaçınır. Ancak bu genellikle sorgu planlarının zaman içinde daha da kötüleştiği anlamına gelir. İstatistikleri çalıştırdıklarında bir takım problemlerle karşılaşıyorlar. Bu sorunları çözmek için ortaya çıkan karışıklık, çalışan istatistiklerin tehlikeleriyle ilgili korkularını doğruluyor. Ancak düzenli olarak istatistik toplarlarsa, izleme araçlarını olması gerektiği gibi kullanırlar ve ortaya çıkan sorunları düzeltirlerse daha az baş ağrıları olur ve aynı anda hepsiyle karşılaşmazlardı.

13
user11318

Veriler "önemli ölçüde" ne zaman değişirse.

Bir tablo 1 satırdan 200 satıra geçerse, bu önemli bir değişiklik. Bir masa 100,000 sıradan 150,000 satıra geçtiğinde, bu çok önemli bir değişiklik değildir. Bir tablo, tümüyle sorgulanan X sütunundaki aynı değerlere sahip 1000 satırdan, X sütunundaki neredeyse benzersiz değerlere sahip 1000 satıra geçtiğinde, bu önemli bir değişiklik.

İstatistikler, madde sayıları ve göreceli sıklıklar hakkında bilgi depolar - belirli bir ölçütle kaç satırın eşleşeceğini "tahmin etmesini" sağlayan şeyler. Yanlış tahmin ettiğinde, optimizer bir very suboptimal sorgu planı seçebilir.

13
Jonathan Rupp

Oracle 11g istatistikleri varsayılan olarak otomatik olarak toplanmaktadır.

Oracle Database kurulumunda iki Zamanlayıcı penceresi önceden tanımlanmıştır:

  • WEEKNIGHT_WINDOW 10: 00'da başlar. ve her pazartesi saat 18: 00'de biter. 
  • WEEKEND_WINDOW Cumartesi ve Pazar günlerini kapsar.

İstatistikler en son ne zaman toplandı?

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.

Otomatik istatistik toplamanın durumu?

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

Windows Grupları?

SELECT window_group_name, window_name FROM dba_scheduler_wingroup_members;

Pencere Programları?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

Bu Şema'da Veritabanı İstatistiklerini manuel olarak toplayın: 

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

Veritabanı İstatistiklerini manuel olarak tüm Şemalarda toplayın!

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

Hangi Oracle sürümünü kullanıyorsunuz? Oracle 10'a atıfta bulunan bu sayfayı kontrol edin:

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

Diyor ki:

İstatistik toplamada önerilen yaklaşım, Oracle'ın istatistikleri otomatik olarak toplamasına izin vermektir. Oracle, tüm veritabanı nesneleri için istatistikleri otomatik olarak toplar ve bu istatistikleri düzenli olarak zamanlanmış bir bakım işinde tutar.

5
David Medinets

Oracle'ın 10 g ve daha yüksek sürümlerinde, "iyi" yürütme planı kararını vermek için optimize edici tarafından tablo ve dizinler hakkında güncel istatistiklere ihtiyaç vardır. Ne kadar sıklıkla istatistik topladığınız zor bir aramadır. Bu, uygulamanıza, şemaya, veri hızına ve iş uygulamalarına bağlıdır. Eski Oracle sürümüyle geriye dönük olarak uyumlu olacak şekilde yazılmış bazı üçüncü parti uygulamalar yeni optimize edici ile iyi performans göstermiyor. Bu başvurular, tabloların istatistiklerini içermemesini zorunlu kılar, böylece db, temel yürütme planını tekrar yönetmek için başvurur. Ancak ortalama olarak Oracle, istatistiklerin eski istatistiklere sahip tablolarda toplanmasını önerir. Tabloları, izlenecek ve durumlarını kontrol edecek şekilde ayarlayabilir ve eğer eski/ne zaman eskiyse analiz etmelerini sağlayabilirsiniz. Genellikle bu yeterli, bazen de değil. Gerçekten veritabanına bağlı. Veritabanım için, performansı korumak için gece istatistiklerinin toplanması gereken bir dizi OLTP tablo var. Diğer tablolar haftada bir kez analiz edilir. Büyük dw veritabanımızda, tablolar genel db yükünü ve performansını etkilemeden düzenli analiz için çok büyük olduğu için gerektiğinde analiz ediyoruz. Bu yüzden doğru cevap, uygulamaya, veri değişikliğine ve iş gereksinimlerine bağlıdır.

2
MichaelN

Oracle tarafından desteklenen büyük bir çok kullanıcılı planlama sistemini yönetirken, DBA'mızda haftalık olarak istatistik toplayan bir iş vardı. Ayrıca, istatistiklerden etkilenebilecek veya etkilenebilecek önemli bir değişiklik yaptığımız zaman, işleri yakalayabilmek için işimiz bitmek zorunda kalır.

2
Joe Skora

Eski istatistiklerin sorgu planlarında istenmeyen değişikliklere neden olma riskini, eski istatistiklerin kendilerinin de sorgu planlarının değişmesine neden olma riskine karşı dengelemesini sağlayın. 

Tablo ISSUE ve sütuntaki değerlerin monoton olarak az veya çok arttığı bir CREATE_DATE sütununa sahip bir hata veritabanınız olduğunu hayal edin. Şimdi, bu sütunda, Oracle'a bu sütunun değerlerinin 1 Ocak 2008 ile 17 Eylül 2008 arasında eşit bir şekilde dağıldığını söyleyen bir histogram olduğunu varsayalım. Geçen hafta oluşturulan tüm sorunları arıyorsanız (örneğin, 7 - 13 Eylül) iade edilir. Uygulama kullanılmaya devam edilirse ve istatistikler hiçbir zaman güncellenmezse, bu histogram daha az doğru olacaktır. Bu nedenle, optimize edici "geçen hafta oluşturulan sorunların" sorgularının zaman içinde daha az ve daha az doğru olmasını bekleyecek ve sonunda Oracle'ın sorgu planını olumsuz yönde değiştirmesine neden olabilir. 

1
Justin Cave

Genel olarak, veritabanında sık sık ekleme yapılması ya da büyük veri değişikliği gibi sık sık bir gerekçeniz olmadığı sürece, veritabanında sık sık istatistik toplamanız önerilmez. sorgular yürütme planını yeni bir kötü yürütme planına göre, yeni yoksul planlardan etkilenen her sorguyu ayarlamaya çalışmak size zaman kazandırabilir, bu nedenle yeni istatistikler toplamanın bir test veritabanı üzerindeki etkisini test etmeniz gerekir. Bunun için vaktiniz ya da erkeğiniz yok, en azından yenilerini toplamadan önce orijinal statiği yedekleyerek bir geri dönüş planı tutmalısınız, bu nedenle yeni bir istatistik toplarsanız ve sorgular ortaya çıkmazsa Beklendiği gibi, orijinal istatistikleri kolayca geri yükleyebilirsiniz.

Orijinal istatistiklerin yedeklenmesinde ve yenilerinin toplanmasında ve yeni istatistiklerin toplanmasının beklendiği gibi gitmemesi durumunda orijinal istatistiklerini geri yüklemek için kullanabileceğiniz SQL komutunu vermenize yardımcı olabilecek çok faydalı bir komut dosyası vardır. Senaryoyu bu linkte bulabilirsiniz: http://dba-tips.blogspot.com/2014/09/script-to-ease-gathering-statistics-on.html

0
Chion

Veri ambarı tipi bir sistem söz konusu olduğunda, hiç istatistik toplamamayı ve dinamik örneklemeye güvenmeyi düşünebilirsiniz (optimizer_dynamic_sampling öğesini seviye 2 veya üstüne ayarlamak).

0
David Aldridge