... berharap aku bisa mendapatkan ... perkiraan kasar tentang apa yang harus kita jalankan.
Tanpa informasi lebih lanjut tentang kueri dan ukuran data Anda, sangat sulit untuk memberi Anda segala jenis perkiraan, apalagi perkiraan yang akurat.
Database: sql server 2008 r2 database perusahaan
Windows: Windows 2008 r2 Enterprise 64 bit, cukup yakin berjalan di VMware.
Prosesor: Intel (R) Xeon (R) CPU E7-4860 @ 2.27GHz 2.26 GHz (2 prosesor)
Memori yang dipasang: 4GB
Dua prosesor (saya berasumsi ini terpapar dalam VM sebagai 2 core) mungkin atau mungkin tidak sesuai ketentuan. Core yang ditugaskan untuk VM tidak harus dipetakan langsung ke core fisik (atau bahkan diizinkan untuk menggunakan 100% dari satu core ketika dibutuhkan!), Jadi Anda mungkin menemukan ini adalah sumber daya yang lebih fleksibel daripada memori. Tanpa ada informasi lebih lanjut tentang beban kerja atau konfigurasi hardware / virtualisasi, saya akan mengatakan meningkatkan ini ke 4 akan menyenangkan untuk dimiliki.
Alokasi memori. Oh Boy. Ini terlalu kekurangan bekal untuk beban kerja. Windows itu sendiri membutuhkan minimal 2-3 GB untuk tetap bahagia, dan masing-masing dari 2 pengguna yang menjalankan BIDS pada kotak akan membutuhkan setidaknya masing-masing 500 MB. Dan dengan itu, kotak sudah maksimal, dan saya bahkan tidak mulai mencari tahu berapa banyak database yang akan dibutuhkan.
Mayoritas pengguna berinteraksi dengan database melalui situs web asp.net dan situs web server Laporan.
Anda tidak mengatakan, tetapi jika ini berjalan pada kotak yang sama, persyaratan memori untuk mereka juga perlu diperhitungkan.
Akhirnya, kami memiliki operasi pergudangan data yang cukup terlibat yang mungkin membawa 3 juta catatan per hari melalui paket SSIS yang juga berjalan di server.
Dengan asumsi ini berjalan pada malam hari ketika tidak ada pengguna langsung pada sistem, saya tidak melihat ini sebagai masalah kecuali butuh waktu terlalu lama untuk berjalan. Bagian dari hal ini adalah yang paling tidak Anda khawatirkan; pengguna langsung lebih penting.
Permintaan kami sebelumnya untuk memori tambahan telah ditolak dengan respons umum bahwa kami perlu melakukan lebih banyak optimasi kueri.
Seperti yang saya tunjukkan di atas, jumlah memori saat ini yang telah disediakan sama sekali tidak memadai. Namun, pada saat yang sama, di ujung lain dari spektrum, sangat tidak mungkin Anda bisa mendapatkan cukup memori yang disediakan untuk dapat menyimpan seluruh database dalam memori sekaligus.
Meskipun Anda mendapatkan tanggapan menyeluruh seperti itu (yang, omong-omong, mungkin lebih berkaitan dengan seberapa persuasif justifikasi Anda terhadap sumber daya tambahan, dan bukan penggunaan sumber daya yang sebenarnya itu sendiri), sangat mungkin efisiensi database dapat ditingkatkan. Namun tidak ada jumlah penyetelan yang dapat memperbaiki masalah yang Anda alami sekarang; saran itu adalah non-starter lengkap bagi saya.
Saya akan mengambil pendekatan keseluruhan bahwa jumlah memori yang saat ini disediakan di bawah minimum yang diperlukan (yang harus diperbaiki secepatnya), dan sumber daya tambahan mungkin diperlukan untuk meningkatkan pengalaman pengguna ke tingkat yang dapat digunakan sementara perbaikan dilakukan untuk meningkatkan efisiensi sistem.
Berikut adalah beberapa pemikiran (dalam urutan serangan):
Anda akan menang jika Anda dapat membuktikan seberapa banyak kinerja meningkat setiap kali Anda mendapatkan lebih banyak sumber daya yang disediakan. Melacak metrik kinerja menggunakan pencatatan Monitor Kinerja (catatan: bagian pencatatan sangat penting), termasuk waktu respons situs web jika Anda bisa. Mulailah melakukan ini sekarang , sebelum melakukan hal lain. Ketika Anda akhirnya mencapai jumlah minimum memori (Anda tidak akan mendapatkan 32 GB segera), tiba-tiba Anda sekarang memiliki bukti bahwa memori yang ditambahkan meningkatkan hal-hal ... yang berarti menambahkan lebih banyak lagi mungkin akan membantu juga! Jika Anda tidak mengumpulkan garis dasar pada konfigurasi saat ini, Anda akan ketinggalan perahu ketika segala sesuatunya mencapai tingkat minimum yang disarankan.
Analisis statistik tunggu server Anda . Ini akan memberi tahu Anda apa hambatan terbesar dalam sistem. Anda mungkin memiliki PAGEIOLATCH_XX
waktu tunggu yang paling umum / tertinggi, yang menunjukkan terlalu banyak I / O yang dilakukan untuk mengambil halaman dari disk. Ini dapat dikurangi dengan menambahkan memori, sehingga I / O fisik menjadi kurang sering karena data yang diperlukan sudah ada dalam memori. Meskipun analisis ini adalah kesimpulan yang sudah pasti, fakta bahwa Anda telah mengumpulkan statistik ini sama sekali memberi Anda lebih banyak amunisi ketika membenarkan kebutuhan akan sumber daya.
Seperti yang saya sebutkan di atas, persyaratan minimum untuk memori tidak terpenuhi. Kumpulkan serangkaian persyaratan perangkat keras yang disarankan untuk semua perangkat lunak yang Anda jalankan, dan mungkin juga ambil tangkapan layar dari Task Manager. Ini saja harus cukup untuk membenarkan setidaknya 4-8 GB lebih, di tempat. Jika mereka masih menolak, cobalah meyakinkan mereka untuk mengizinkan Anda mencobanya selama seminggu, dan berikan kembali setelah itu (Anda mengumpulkan statistik kinerja, jadi Anda tidak perlu mengembalikannya karena pada pertengahan minggu Anda ' Saya akan dapat membuktikan seberapa banyak itu memperbaiki situasi). Jika mereka masih menolak, Anda diatur untuk gagal; URLT .
Jika Anda dapat membebani sebagian dari beban kerja (khususnya, hindari remoting jika memungkinkan), ini akan meningkatkan jumlah memori yang tersedia untuk database, yang lebih penting.
Anda tidak akan dapat memasukkan seluruh database ke dalam memori sekaligus, yang berarti Anda perlu mengatur pengaturan memori maks SQL Server dengan sangat hati-hati untuk mencegah memori berlebih , yang membunuh kinerja seperti tidak ada yang lain . Komit berlebihan sebenarnya lebih buruk daripada tidak bisa memasukkan semua data dalam memori. Sangat mungkin Anda berada dalam skenario ini sekarang hanya karena tidak ada memori sama sekali, dan kemungkinan pengaturan memori maks diatur ke default (tidak terbatas).
Karena Anda menjalankan SQL Server Enterprise Edition, dan memori sangat mahal, saya akan sangat mempertimbangkan untuk menerapkan kompresi data . Ini akan mengurangi peningkatan penggunaan CPU untuk menghemat ruang memori (dan karenanya mengurangi akses disk, yang relatif sangat lambat).
Tune basis data. Kemungkinan struktur dan kueri dapat menggunakan peningkatan sejauh pengindeksan dan pola akses. Juga, jika banyak data yang sering dipindai dan dikumpulkan, membuat tampilan yang diindeks, tabel ringkasan, atau laporan yang dikomputasi mungkin sangat membantu.
Ini mungkin merupakan dampak yang panjang karena mungkin berarti lebih banyak penyediaan perangkat keras, tetapi menerapkan solusi caching. Permintaan tercepat adalah yang Anda tidak pernah buat .
Itu hanya beberapa ide. Intinya adalah bahwa menyetel saja tidak akan menyelesaikan masalah di sini, juga tidak akan perangkat keras sendiri, meskipun yang terakhir mungkin akan meringankan sebagian besar masalah langsung. Begitulah caranya: melempar perangkat keras pada masalah dalam jangka pendek untuk memadamkan api, dan melempar tuning pada masalah dalam jangka panjang untuk memperbaiki akar penyebabnya sebaik mungkin.