Berapa banyak RAM yang dibutuhkan server?

12

Saya memiliki beberapa server yang digunakan di seluruh dunia. Mereka menjalankan Windows 2003 x64 dengan SQL Server 2005 x64 dengan 6 GB RAM. Kotak tidak memiliki konfigurasi terbaik (atau bahkan dapat diterima), karena orang yang memesannya bertahun-tahun yang lalu tidak benar-benar tahu apa yang dia lakukan.

Kotak-kotak ini secara konsisten kehabisan memori, akhirnya menggunakan file paging dan semuanya melambat. Biasanya biaya komit adalah 5.8GB dan kemudian ketika seseorang perlu melakukan sesuatu yang intensif (misalnya menjalankan laporan), angka itu melewati atap.

Saya sudah mencoba untuk mendapatkan kekuatan yang memesan lebih banyak memori, tetapi saya mendapatkan oposisi besar (misalnya membuat perangkat lunak lebih berkinerja, terlalu banyak biaya untuk semua server ini, atau membuktikan bahwa kotak tidak memiliki cukup memori, dll. ..)

Apakah ada pedoman (atau formula) untuk berapa banyak RAM yang dibutuhkan kotak yang dapat saya presentasikan kepada non-teknisi, sehingga kami akhirnya dapat memesan lebih banyak memori?

AngryHacker
sumber
Apakah sistem dikembangkan di rumah?
Oskar Duveborn
@Oskar. Ya, saya adalah pengembang dan kode ini dioptimalkan ke neraka dan kembali. Hanya ada satu ton data.
AngryHacker
Kemudian lihat jawaban saya. Ini adalah jenis spesialisasi saya.
mrdenny

Jawaban:

9

Tidak benar-benar ada cara untuk mengatakannya dengan mudah karena sepenuhnya bergantung pada penggunaan dan aplikasi Anda. Anda memaksimalkan server database ... seberapa besar database? Apa statistik transaksi Anda?

Batasan dunia nyata jelas dalam skenario Anda. Anda menjalankan sementara pada 6 manggung tanpa masalah, maka itu bertukar dan meronta-ronta. Jadi 6 manggung tidak cukup.

Jika kinerjanya cukup sehingga berdampak pada bisnis, maka atasan Anda harus mendengar cukup banyak keluhan sehingga perlu diingat. Cari tahu berapa biaya waktu Anda dan kemudian cari tahu berapa biayanya untuk "menyelaraskan" server dan memecahkan masalah penyetelan, ketika memori ditambahkan ke server mungkin sangat memecahkan masalah untuk biaya memori dan kurang dari setengah jam downtime.

Anda tidak akan tahu persis jumlah memori yang Anda butuhkan sampai Anda benar-benar menggunakan dalam kehidupan nyata Anda dan bekerja dari sana.

Yang mengatakan, Anda mungkin ingin memverifikasi bahwa aplikasi Anda benar-benar menjadi hambatan. Jalankan monitor kinerja windows untuk melihat statistik i / o disk dan throughput jaringan Anda. Lihat juga tingkat fragmentasi Anda ( Google adalah teman yang baik di sini ). Anda dapat mencoba mengaudit kode untuk masalah yang jelas juga di mana kueri menjadi sangat tidak efisien ( Google lagi ).

Tapi sekali lagi itu semua tergantung pada seberapa parah ini berdampak pada bisnis. Apakah lebih berharga untuk berinvestasi dalam penyetelan, atau cukup buruk untuk melemparkan perangkat keras terlebih dahulu dan kemudian mencoba menyetemnya?

Bart Silverstrim
sumber
Ukuran +1 dan statistik diperlukan
Oskar Duveborn
12

Cara mudah untuk melihat apakah Anda memerlukan lebih banyak RAM adalah dengan memetakan penghitung perfmon Page Life Expectancy. Penghitung ini memberi tahu Anda berapa lama SQL Server berpikir bahwa data akan disimpan di kolam penyangga sebelum perlu memberikan ruang bagi data lain. Anda ingin nomor ini setinggi mungkin. Dengan 6 Gigs of RAM terinstal (Anda harus memiliki SQL diatur ke max di mungkin sekitar 4 gigs) Anda mungkin hanya akan menyimpan data dalam memori selama beberapa menit paling banyak, ketika seseorang menjalankan laporan besar Anda akan melihat tangki nomor ini ke beberapa detik. Semakin banyak RAM yang Anda miliki, semakin lama data dapat disimpan dalam memori, dan semakin sedikit pembacaan dari disk perlu dilakukan.

Sebagai contoh, sistem yang saya kerjakan saat ini memiliki 256 Gigs RAM dan kami menyimpan data dalam memori sekitar 12000 detik atau lebih.

Tolong jangan meminta nomor target untuk memukul, Anda hanya ingin nomor setinggi mungkin. Tanpa mengetahui BANYAK lagi tentang sistem Anda, saya tidak bisa memberikan angka yang baik untuk menembak.

mrdenny
sumber
6

Hmmmm. Nah, 6 gigs adalah jumlah ram yang layak, bahkan untuk instalasi MSSQL besar. Anda mungkin benar-benar ingin melihat dan memastikan bahwa kode Anda benar-benar efisien. Transaksi 6 manggung agak tidak biasa ... Saya telah bekerja pada sistem penggajian di seluruh negara bagian yang tidak manggung di atas pemrosesan 1099 akhir tahun ... Dan untuk membuatnya sering berjalan ? Saya tidak tahu Jenis data apa yang Anda kerjakan?

Yang sedang berkata, Anda dapat memasukkan RAM sebanyak yang Anda suka dalam kotak 64 bit, dan ram murah, jadi sebaiknya masukkan sebanyak mungkin di sana ... Tidak dapat benar-benar memiliki terlalu banyak RAM pada server basis data.

Sunting: Ini sangat ketinggalan zaman sekarang. Saya memiliki kotak MSSQL dengan 256 gigs RAM.

Satanicpuppy
sumber
1
Benar-benar tidak dapat memiliki terlalu banyak RAM pada server database. Mungkin tidak, tetapi Anda dapat memiliki RAM yang Anda habiskan karena tidak digunakan. Sementara saya setuju dengan gagasan umum bahwa membayar untuk bermurah hati pada kotak-kotak yang melakukan tugas-tugas tertentu, saya tidak berpikir itu meluas ke hanya membuang sumber daya ke dalam sistem tanpa memahami persyaratannya.
Rob Moir
2
@robert: Ini tidak seperti saya menganjurkan membeli server blade. Memaksimalkan RAM di server cukup mudah, dan jika Anda kehabisan memori, mengapa tidak menambahkan lebih banyak? Saya pikir masalahnya kemungkinan ada dalam kodenya, tetapi jika Anda dapat memperbaiki masalah dengan beberapa ratus dolar RAM, ini adalah penggunaan uang yang efisien.
Satanicpuppy
1
@robert: Saya setuju. Tetapi saya sudah terlalu sering melihat orang menghabiskan ribuan pada coders dan konsultan untuk memperbaiki masalah perangkat lunak, ketika melemparkan sedikit lebih banyak perangkat keras pada itu akan melakukan hal yang sama untuk sebagian kecil dari biaya.
Satanicpuppy
1
6 Gigs adalah konfigurasi memori SQL Server ukuran yang baik? Anda telah menggunakan beberapa server yang sangat kecil. Saya punya kotak dengan 256 Gigs yang diinstal, dan saya punya teman dengan 512 Gigs yang diinstal. 6 Gigs bukanlah apa-apa.
mrdenny
1
@mdmarra: Eh. Di 2012, tentu saja. Di 2009? Tidak terlalu banyak.
Satanicpuppy
4

Sebelum Anda mencoba membeli lebih banyak memori (atau komponen lain), saya sarankan menjalankan analisis kinerja di server. Anda dapat melakukan ini sendiri menggunakan perfmon atau Anda dapat melihat menggunakan alat pihak ketiga. Anda harus menganalisis kinerja OS dan SQL server. IMHO, terlalu sering kita siap untuk melemparkan perangkat keras pada masalah sebelum analisis yang tepat telah dilakukan. Untuk semua yang Anda tahu pada titik ini bisa jadi masalah dengan kueri, prosedur tersimpan, rencana eksekusi, disk I / O, pemanfaatan CPU, dll. Dll. Tekanan memori sering kali merupakan gejala dari kemacetan lain dalam sistem.

joeqwerty
sumber
1

seperti yang dikatakan "Satanicpuppy", tidak ada RAM terlalu banyak, tetapi 6GB seharusnya ok, mungkin Anda harus memikirkan kembali apa yang dilakukan server Anda, saya tidak berpikir bahwa Anda memiliki masalah "perangkat keras", Anda harus fokus pada pemrograman SQL Anda ...

Remus Rigo
sumber
1

Ketika datang ke server database tidak ada yang namanya "cukup" memori. Tentu, itu tergantung pada apa yang sebenarnya mereka lakukan dan jalankan tetapi jika itu adalah database yang digunakan secara konstan yang mengandung banyak data dan melakukan query yang rumit - 6 GB bisa dengan mudah sangat tidak memadai.

Saya akan mulai dengan memutakhirkan satu server bermasalah ke setidaknya 32 atau 64 GB dan melihat apakah itu membantu. Jika tidak, beralihlah ke penyetelan basis data, pemecahan masalah aplikasi dan debugging - yang semuanya, kecuali seorang idiot yang mendesain database, harganya jauh lebih mahal daripada beberapa batang memori tingkat server (dan bahkan jika seorang idiot mendesainnya, mendapatkan desain yang lebih jelas) kesalahan yang diperbaiki dengan dukungan yang dipertahankan dapat membuktikan tantangan yang cukup besar).

Yang mengatakan, seperti orang lain nyatakan - itu bisa menjadi sesuatu yang menahannya (terlepas dari masalah desain perangkat lunak), seperti kurangnya disk atau kinerja jaringan I / O - mempekerjakan DBA pro untuk hanya melalui pemantauan kinerja SQL dasar untuk hari bisa terbukti bermanfaat.

Oskar Duveborn
sumber
0

Anda harus melihat membangun lebih banyak indeks. Saya berpikir bahwa secara umum, kebanyakan orang di-index database mereka.

Ini masih kode udara, saya belum sepenuhnya diuji, tetapi harus membawa Anda ke arah yang benar

http://accessadp.com/2011/08/22/missing-indexes-great-script-for-determining-roi/

Select ‘create index IX_’ +
 sys.objects.name +
 isnull(replace(‘_’ + equality_columns, ‘,’, ‘_’), ”) +
 isnull(replace(‘_’ + inequality_columns, ‘,’, ‘_’), ”) + ‘ on ‘ +
 sys.objects.name +
 ‘(‘ +
 coalesce(equality_columns + ‘,’ + inequality_columns, equality_columns , inequality_columns ) +
 ‘) ‘ +
 isnull(‘ include (‘ + included_columns + ‘)’, ”)
 as CreateIndexSql,
 (CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.user_seeks)+CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.unique_compiles))*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_total_user_cost)*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_user_impact/100.0) AS Score,
 sys.schemas.schema_id,
 sys.schemas.name AS schema_name,
 sys.objects.object_id,
 sys.objects.name AS object_name,
 sys.objects.type,
 partitions.Rows, partitions.SizeMB,
 sys.dm_db_missing_index_details.equality_columns,
 sys.dm_db_missing_index_details.inequality_columns,
 sys.dm_db_missing_index_details.included_columns,
 sys.dm_db_missing_index_group_stats.unique_compiles,
 sys.dm_db_missing_index_group_stats.user_seeks, sys.dm_db_missing_index_group_stats.user_scans,
 sys.dm_db_missing_index_group_stats.avg_total_user_cost, sys.dm_db_missing_index_group_stats.avg_user_impact,
 sys.dm_db_missing_index_group_stats.last_user_seek, sys.dm_db_missing_index_group_stats.last_user_scan,
 sys.dm_db_missing_index_group_stats.system_seeks, sys.dm_db_missing_index_group_stats.system_scans,
 sys.dm_db_missing_index_group_stats.avg_total_system_cost, sys.dm_db_missing_index_group_stats.avg_system_impact,
 sys.dm_db_missing_index_group_stats.last_system_seek, sys.dm_db_missing_index_group_stats.last_system_scan
 FROM
 sys.objects
 JOIN (
 SELECT
 object_id, SUM(CASE WHEN index_id BETWEEN 0 AND 1 THEN row_count ELSE 0 END) AS Rows,
 CONVERT(numeric(19,3), CONVERT(numeric(19,3), SUM(in_row_reserved_page_count+lob_reserved_page_count+row_overflow_reserved_page_count))/CONVERT(numeric(19,3), 128)) AS SizeMB
 FROM sys.dm_db_partition_stats
 WHERE sys.dm_db_partition_stats.index_id BETWEEN 0 AND 1 –0=Heap; 1=Clustered; only 1 per table
 GROUP BY object_id
 ) AS partitions ON sys.objects.object_id=partitions.object_id
 JOIN sys.schemas ON sys.objects.schema_id=sys.schemas.schema_id
 JOIN sys.dm_db_missing_index_details ON sys.objects.object_id=sys.dm_db_missing_index_details.object_id
 JOIN sys.dm_db_missing_index_groups ON sys.dm_db_missing_index_details.index_handle=sys.dm_db_missing_index_groups.index_handle
 JOIN sys.dm_db_missing_index_group_stats ON sys.dm_db_missing_index_groups.index_group_handle=sys.dm_db_missing_index_group_stats.group_handle
 WHERE
 sys.dm_db_missing_index_details.database_id=DB_ID()
 AND (CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.user_seeks)+CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.unique_compiles))*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_total_user_cost)*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_user_impact/100.0) > 100
Aaron Kempf
sumber