Tahun depan ini, saya membantu upaya untuk membersihkan beberapa lingkungan SQL Server.
Kami memiliki sekitar 10.000 prosedur tersimpan dan memperkirakan bahwa hanya sekitar 1000 di antaranya yang digunakan secara teratur, dan sekitar 200 lainnya digunakan pada kesempatan langka, artinya kami memiliki banyak pekerjaan yang harus dilakukan.
Karena kami memiliki banyak departemen dan tim yang dapat mengakses database dan prosedur ini, kami tidak selalu yang memanggil prosedur, artinya kami harus menentukan prosedur apa yang dipanggil. Selain itu, kami ingin menentukan ini selama beberapa bulan, bukan dalam beberapa hari (yang menghilangkan beberapa kemungkinan).
Salah satu pendekatan untuk ini adalah dengan menggunakan SQL Server Profiler
dan melacak prosedur apa yang dipanggil dan membandingkannya dengan daftar prosedur apa yang kita miliki, sambil menandai apakah prosedur tersebut digunakan atau tidak. Sejak saat itu, kami dapat memindahkan prosedur ke skema lain jika suatu departemen berteriak.
Apakah menggunakan pendekatan Profiler
yang paling efektif di sini? Dan / Atau pernahkah Anda melakukan sesuatu yang serupa dan menemukan cara lain / cara yang lebih baik untuk melakukan ini?
sumber
Anda dapat menemukan pertanyaan ini berguna, ini berlaku untuk tabel dan kolom tetapi menyarankan menggunakan alat pihak ketiga ApexSQL Clean yang juga dapat menemukan prosedur tersimpan yang tidak digunakan serta semua objek yang tidak direferensikan oleh objek lain dalam database, atau dalam database eksternal
Penafian: Saya bekerja untuk ApexSQL sebagai Support Engineer
sumber
unreferenced stored procedures
, sebaliknya OP ingin menemukan SP yang tidak digunakan. Jawaban Anda tidak berfungsi sebagai jawaban untuk pertanyaan ini.Jika Anda menggunakan SQL Server 2008+, Anda juga dapat menggunakan acara yang diperluas dengan target histogram . Mungkin ini akan lebih ringan daripada jejak.
AFAIK Anda perlu membuat sesi yang berbeda untuk setiap basis data yang menarik karena saya tidak dapat melihat indikasi bahwa penataan pada beberapa kolom dimungkinkan. Contoh cepat di bawah ini menyaring
database_id=10
Dan kemudian setelah menjalankan beberapa prosedur tersimpan di DB itu beberapa kali dan mengambil data dengan
Outputnya adalah
Menunjukkan bahwa prosedur dengan
object_id
dari1287675635
dieksekusi 36 kali misalnya. Hanyaasynchronous_bucketizer
memori, jadi yang terbaik adalah mengatur sesuatu yang polling ini sering dan menyimpan ke penyimpanan persisten.sumber
WHERE (source_database_id IN (10,15,20))
tetapi sayangnya ini tidak didukung.object_id
(atau samaobject_name
) dalam database yang berbeda secara terpisah dan saya tidak berpikir itu mungkin juga.extended events
mana ditambahkan pada 2012 bukan 2008?Sebagai tindak lanjut dari naskah Kin. Berikut ini adalah skrip sederhana untuk membuat tabel untuk melacak penggunaan dari waktu ke waktu & skrip untuk memperbaruinya secara berkala.
sumber
Posting ini juga menyediakan skrip untuk menemukan oject yang tidak digunakan: Cari tabel database yang tidak digunakan di SQL Server Di bawah ini adalah skrip dari artikel, saya mengubah tipe tabel "U" menjadi tipe prosedur tersimpan "P":
sumber