On Adım-Bir veritabanı arızasıyla karşılaştıktan sonra DBA'nın yerini hızlı bir şekilde bulma

Genel Bakış

Çoğu durumda, uygulamayla ilgili bir sorun olduğu sürece, ne zaman ve nerede olursa olsun, DBA her zaman ilk aramayı alan kişidir.Ağır durumlarda, bir telefon bombardımanı olacaktır.

Bu tür sorunlarla karşılaştığınızda ilk şey zihniyettir, paniğe kapılmamalısınız, sakin, cesur ve dikkatli olmalısınız ve çok önemli olan bir diğer şey ise teşhis fikirleri ve yardımcı senaryolardır.Bugün, ağırlıklı olarak problemlerle karşılaşıldığında genel ele alma fikirlerini tanıtacağım ve kullanımı paylaşacağım. Bazı komut dosyaları sorunları hızla bulmanıza ve çözmenize yardımcı olarak iş kesintilerini azaltır.

1. İşletim sistemi yükünü kontrol edin

Veritabanı sunucusuna giriş yaptıktan sonra, ilki CPU, bellek ve G / Ç'nin sistem komutları aracılığıyla anormal olup olmadığını doğrulamaktır.Her sistemin komutları farklıdır.Ortak olanlar top, topas, vmstat ve iostat'tır.

2. Bekleyen olayları görüntüleyin

Etkin bekleme olaylarını görüntüleyin. Bu, veritabanını izlemek, devriye gezmek ve tanılamak için en temel yöntemdir. Genellikle sorunların% 81'i olay bekleyerek neden olarak önceden belirlenebilir. Bu, veritabanı işleminin en doğrudan tezahürüdür. Aşağıdaki komut dosyası, her birini görüntülemektir. Bekleyen olayların sayısı, bekleme süresi ve bazı yaygın BOŞTA bekleme olayları hariç

a45 için col olayı SELECT inst_id, EVENT, SUM (DECODE (WAIT_TIME, 0, 0, 1)) "Prev", SUM (DECODE (WAIT_TIME, 0, 1, 0)) "Curr", COUNT (*) "Tot", sum (SECONDS_IN_WAIT ) SECONDS_IN_WAIT GV $ SESSION_WAIT'DEN NEREDE olay DEĞİL IN ('smon timer', 'pmon timer', 'rdbms ipc message', 'SQL * İstemciden gelen net mesaj', 'gcs remote message') VE olay '% boşta%' GİBİ DEĞİL VE olay '% Idle%' GİBİ DEĞİL VE olay "% Akım AQ%" GİBİ DEĞİL GROUP BY inst_id, EVENT 1,5 azalan SİPARİŞ;

Burada, bazı yaygın anormal bekleme olaylarının nedenlerini kavramamız ve kitaplık önbellek kilidi, diğer oturum tarafından okuma, satır önbellek kilidi, arabellek meşgul beklemeleri, mandal: paylaşılan havuz, gc arabelleği meşgul, imleç: X üzerindeki S pimi gibi koşullu yansımalar oluşturmamız gerekir. , Doğrudan yol okuma, günlük dosyası senkronizasyonu, enq: TX-indeks çekişmesi, PX Deq Kredisi: blkd gönder, mandalsız, enq: TX-satır kilidi çekişmesi vb. Anormal bekleme olaylarının sayısı ve bekleme süresi çok uzunsa, o zaman Sorun giderme için giriş noktası buradadır.

3. Bekleyen olaya göre görüşmeyi kontrol edin

Anormal bekleme olayını aldıktan sonra, bekleme olayına göre oturum detaylarını kontrol ederiz, yani hangi SQL'in beklediğini hangi oturumların yürütüldüğünü kontrol eder, ayrıca kullanıcı adı ve makine adı ile engellenip engellenmediğini öğreniriz. Ek olarak, aşağıdaki komut dosyası, oturumu kullanıcıya göre kontrol etmek, oturumu SQL_ID'ye göre kontrol etmek vb. İçin yeniden yazılabilir.

SELECT / * + kural * / sid, s.serial #, spid, event, sql_id, seconds_in_wait ws, row_wait_obj # obj, s.username, s.machine, BLOCKING_INSTANCE || '.' || blocking_session b_sess FROM v $ oturum s, v $ işlem p NEREDE olay = 'olay_adı' VE s.paddr = p.addr siparişi 6;

4. Bir oturumun ayrıntılarını sorgulayın

Oturum listesini aldıktan sonra, son çalıştırılan SQL_ID, oturum açma zamanı vb. Gibi aşağıdaki SQL'e dayalı olarak bir oturumun ayrıntılı bilgilerini sorgulayabilirsiniz. SQL ayrıca birden çok olarak yeniden yazılabilir.

SELECT s.sid, s.serial #, spid, event, sql_id, PREV_SQL_ID, seconds_in_wait ws, row_wait_obj # obj, s.username, s.machine, module, blocking_session b_sess, logon_time FROM v $ oturum s, v $ işlem p NEREDE sid = 'sid' VE s.paddr = p.addr;

5. Nesne bilgilerini sorgulama

Önceki iki SQL'den, oturumun beklediği nesne kimliğini görebilir ve aşağıdaki SQL üzerinden nesnenin ayrıntılı bilgilerini sorgulayabilirsiniz.

a30 için col OBJECT_NAME dba_objects'ten sahip, nesne_adı, alt nesne_adı, nesne_türü seçin nerede object_id =

6, sorgu SQL ifadeleri

SQL ifadelerini SQL_ID ve HASH_VALUE'ye göre sorgulayın. Eğer v $ sqlarea içinde bulamazsanız, onu DBA_HIST_SQLTEXT görünümünde sorgulamayı deneyebilirsiniz.

v $ sqlarea'dan sql_id, SQL_fullTEXT'i seçin burada (sql_id = 'sqlid' veya hash_value = to_number ('hashvale')) ve rownum < 2

7. Sorgu oturumu engelleme

Aşağıdaki SQL aracılığıyla bir oturum tarafından kaç oturumun engellendiğini sorgulayın.

v $ oturumundan sayım (*), blocking_session'ı seçin blocking_session'ın boş olmadığı yerde blocking_session'a göre gruplandırın;

8. Veritabanının kilidini sorgulayın

TM, TX'in kilitlediği bir oturumun kilitlerini ve oturum ve kilit sorgularıyla ilişkili SQL'i sorgulamak için aşağıdaki SQL'i kullanın. Burada belirtilen c zamanının 100 saniyeden fazla olduğunu unutmayın. Vakaların% 30'unda, kilit tablosu insanlar tarafından manipüle edilerek uygulama SQL'sinin Engellendi, çalıştırılamaz.

-Bir oturumun kilidini sorgulayın / * + kuralı seç * / SESSION_ID, OBJECT_ID, ORACLE_USERNAME, OS_USER_NAME, PROCESS, LOCKED_MODE gv $ locked_object'ten session_id = --Query TM, TX kilidi v $ lock'tan / * + kuralı * / * seçin nerede ctime > 100 ve ('TX', 'TM') sırasıyla 3,9; Veritabanındaki kilidi sorgulayın /*+rule*/s.sid,p.spid,l.type,round(max(l.ctime)/60,0) lock_min, s.sql_id, s.USERNAME, b.owner, b.object_type seçin, b.object_name v $ oturum s, v $ işlem p, v $ kilit l, v $ kilitli_nesne o, dba_objects b burada o.SESSION_ID = s.sid ve s.sid = l.sid ve o.OBJECT_ID = b.OBJECT_ID ve s.paddr = p.addr ve l.ctime > 100 ve l. Türü ('TX', 'TM', 'FB') grup s.sid, p.spid, l.type, s.sql_id, s.USERNAME, b.owner, b.object_type, b.object_name 9,1,3'e göre sipariş

9. Oturumu sonlandırın

Normalde, sorun ilk belirlendikten sonra işi hızlı bir şekilde eski haline getirmek için, bazı oturumları, özellikle de toplu öldürme oturumlarını öldürmek ve bazen LOKAL = HAYIR ile tüm süreçleri doğrudan öldürmek gerekir. Oturumu tekrar sonlandırırken, kontrol edip onayladığınızdan emin olun. Diğer düğümlerde veya diğer sunucularda çalıştırılamaz.

199 satırı ayarla col olay biçimi a35 -Bir SID oturumunu sonlandır SELECT / * + kural * / sid, seri #, 'öldür -9' || spid, event, blocking_session b_sess FROM v $ oturum s, v $ işlem p NEREDE sid = 'sid' VE s.paddr = p.addr 1'e göre sıralama; -SQL_ID'ye göre oturumu sonlandırın SELECT / * + kural * / sid, seri #, 'öldür -9' || spid, event, blocking_session b_sess FROM v $ oturum s, v $ işlem p NEREDE sql_id = 'sql_id' VE s.paddr = p.addr 1'e göre sırayla; -Bekleyen olaylara göre oturumu sonlandırın SELECT / * + kural * / sid, seri #, 'öldür -9' || spid, event, blocking_session b_sess FROM v $ oturum s, v $ işlem p NEREDE olay = 'olay' VE s.paddr = p.addr 1 sırayla; -Kullanıcılara göre öldürme seansları SELECT / * + kural * / sid, seri #, 'öldür -9' || spid, event, blocking_session b_sess V $ oturum s, v $ işlem p NEREDE kullanıcı adı = 'kullanıcı adı' VE s.paddr = p.addr 1'e göre sırala; --kill all LOCAL = NO proses ps -ef | grep YEREL = HAYIR | grep $ ORACLE_SID | grep -v grep | awk '{print $ 2}' | xargs öldür -9

10. Dafa'yı yeniden başlatın

Statik parametreleri, belleği ve diğer sorunları değiştirmeniz gerekirse, veritabanını yeniden başlatmanız gerekir.Şu anda sorunun nedenini parçalamayın ve araştırma konusu olarak kullanın.İlk görevimiz işi geri yüklemek.

tail -f alert_.log sistem kontrol noktasını değiştirmek; sistem anahtarı günlük dosyasını değiştir; derhal kapanma; başlamak

Yukarıdakiler, özellikle uygulama yavaş ve takılı kaldığında, veritabanı problemleriyle karşılaşıldığında kullanılan bazı betiklerdir.Ayrıca, kullanmadan önce betiğe aşina olmanız önerilir, ayrıca kendi ortamınıza göre yeniden yazabilirsiniz. Daha fazla devop ve DBA içeriği daha sonra paylaşılacak ve ilgilenen arkadaşlar buna dikkat edebilir ~

Ali 20 milyar yuan yatırım yaptı Merhaba seyahatinin "kara atı" nasıl ortaya çıktı?
önceki
Jack Ma durup beklesin, el sıkıştı ve teşekkür etti Kim bunlar?
Sonraki
Mysql veritabanının WAL mekanizmasını ayrıntılı olarak açıklayın - önce günlüğü yazın, ardından diske yazın
Memur + iş baskısı! Hebeinin binlerce kişiden oluşan en son işe alımı, kaydolun
Bu teknoloji kötüye kullanımı önlemeli
Oracle veritabanının temelindeki depolamayı keşfedin - dayanıklılık ve karakter kümesi
70 Haziran'da şehir konut fiyatları açıklandı, üç acımasız gerçek bulduk
Üç genç doktor 10 gün içinde aniden öldü, arkasındaki nedenler utanç verici ...
Ayrıntılı mysql veritabanı tablo alanı yönetimi-paylaşılan tablo alanı ve bağımsız tablo alanı
2,9 milyar dolar harcayan Vipshopun hedefleri nihayet açığa çıktı
Rman'ın aynı platform ve Linux tabanlı aynı sürüm veritabanı altında taşınması (Bölüm 2)
Shenzhen'deki konut fiyatlarının tarif edilemez gizliliği "kayboluyor"
Blog yazarlığından A-hisse listelemesine kadar, gelir Ali Jingdong tarafından destekleniyor .. Neden bu şirket?
Linux'ta aynı platforma ve aynı sürüm veritabanına dayalı Rman heterojen geçişi (birinci bölüm)
To Top