Wie viel RAM benötigt ein Server tatsächlich?

12

Ich habe einige Server auf der ganzen Welt im Einsatz. Sie führen Windows 2003 x64 mit SQL Server 2005 x64 mit 6 GB RAM aus. Die Boxen haben nicht die beste (oder sogar eine akzeptable) Konfiguration, weil der Typ, der sie vor Jahren bestellt hat, nicht wirklich wusste, was er tat.

Die Boxen haben nicht genügend Arbeitsspeicher, verwenden die Auslagerungsdatei und alles verlangsamt sich. In der Regel beträgt die Bereitstellungsgebühr 5,8 GB. Wenn jemand etwas Intensives tun muss (z. B. einen Bericht erstellen), geht diese Zahl über das Dach.

Ich habe versucht, die Kräfte zu bekommen, die dazu führen, dass mehr Speicherplatz zur Verfügung steht, aber ich bekomme massiven Widerstand (z. B. die Leistung der Software zu steigern, die Kosten für all diese Server zu hoch oder nachzuweisen, dass die Box nicht über genügend Speicher verfügt usw.). ..).

Gibt es Richtlinien (oder eine Formel) dafür, wie viel RAM eine Box benötigt, die ich Nicht-Technikern präsentieren kann, damit wir endlich mehr Speicher bestellen können?

AngryHacker
quelle
Ist das System inhouse entwickelt?
Oskar Duveborn
@Oskar. Ja, ich bin der Entwickler und der Code ist zur Hölle und zurück optimiert. Es gibt einfach eine Menge Daten.
AngryHacker
Dann sehen Sie meine Antwort. Darauf habe ich mich spezialisiert.
mrdenny

Antworten:

9

Nicht wirklich leicht zu sagen, da es ganz von Ihrer Nutzung und der Anwendung abhängt. Sie schöpfen einen Datenbankserver aus ... wie groß ist die Datenbank? Was sind Ihre Transaktionsstatistiken?

Die realen Einschränkungen sind in Ihrem Szenario offensichtlich. Du rennst eine Weile ohne Probleme mit 6 Gigs, dann wird getauscht und geknallt. Somit sind 6 Gigs nicht genug.

Wenn die Leistung ausreicht, um das Geschäft zu beeinträchtigen, sollten Ihre Vorgesetzten genug Klagen hören, um die Speicherkapazität zu erhöhen. Finden Sie heraus, was Ihre Zeit kostet, und ermitteln Sie dann, wie viel es kostet, den Server zu "optimieren" und Fehler bei der Optimierung zu beheben, wenn der dem Server hinzugefügte Speicher das Problem möglicherweise in Bezug auf die Speicherkosten und weniger als eine halbe Stunde löst Ausfallzeit.

Sie werden nicht genau wissen, wie viel Arbeitsspeicher Sie benötigen, bis Sie ihn tatsächlich in Ihrer realen Umgebung bereitstellen und von dort aus arbeiten.

Trotzdem möchten Sie vielleicht überprüfen, ob Ihre Anwendung wirklich der Engpass ist. Führen Sie die Windows-Leistungsüberwachung aus, um die E / A-Statistiken und den Netzwerkdurchsatz anzuzeigen. Sehen Sie sich auch Ihren Fragmentierungsgrad an ( Google ist hier ein guter Freund ). Sie können versuchen, den Code auch dann auf offensichtliche Probleme zu überprüfen, wenn eine Abfrage äußerst ineffizient ist ( erneut Google ).

Aber auch hier kommt es darauf an, wie stark sich dies auf das Geschäft auswirkt. Lohnt es sich, mehr in das Tuning zu investieren, oder ist es schon schlimm genug, zuerst Hardware darauf zu werfen und dann zu versuchen, es zu tunen?

Bart Silverstrim
quelle
+1 Größe und Statistiken benötigt
Oskar Duveborn
12

Eine einfache Möglichkeit, um festzustellen, ob Sie mehr RAM benötigen, besteht darin, den Page Life Expectancy Perfmon Counter (Leistungsindikator für die Seitenlebenserwartung) aufzuzeichnen. Dieser Indikator gibt an, wie lange SQL Server davon ausgeht, dass Daten im Pufferpool gespeichert werden, bevor Platz für andere Daten geschaffen werden muss. Sie möchten diese Zahl so hoch wie möglich. Wenn Sie 6 GB RAM installiert haben (Sie sollten SQL auf maximal 4 GB eingestellt haben), werden Sie die Daten wahrscheinlich höchstens einige Minuten im Speicher behalten, wenn jemand einen großen Bericht ausführt, wird dieser Zahlentank angezeigt bis auf wenige Sekunden. Je mehr RAM Sie haben, desto länger können die Daten gespeichert werden und desto weniger Lesevorgänge von den Festplatten sind erforderlich.

Zum Beispiel haben die Systeme, mit denen ich im Moment arbeite, 256 GB RAM und wir behalten die Daten für ungefähr 12000 Sekunden im Speicher.

Bitte fragen Sie nicht nach einer Zielnummer, die getroffen werden soll, Sie möchten nur, dass die Zahl so hoch wie möglich ist. Ohne viel mehr über Ihre Systeme zu wissen, kann ich keine gute Nummer nennen, für die ich schießen kann.

mrdenny
quelle
6

Hmmmm. Nun, 6 Gigs sind eine anständige Menge an RAM, selbst für eine große MSSQL-Installation. Vielleicht möchten Sie tatsächlich nachsehen und sicherstellen, dass Ihr Code wirklich effizient ist. Eine 6-Gig-Transaktion ist etwas ungewöhnlich ... Ich habe an landesweiten Lohn- und Gehaltsabrechnungssystemen gearbeitet, die zum Jahresende 1099 noch keinen Gig übertroffen haben ... Und um einen oft laufen zu lassen ? Ich weiß es nicht. Mit welchen Daten arbeiten Sie?

Davon abgesehen können Sie so viel RAM in eine 64-Bit-Box packen, wie Sie möchten, und RAM ist spottbillig. Stellen Sie also so viel RAM ein, wie Sie können ein Datenbankserver.

Bearbeiten: Dies ist jetzt völlig veraltet. Ich habe MSSQL-Boxen mit 256 GB RAM.

Satanicpuppy
quelle
1
Auf einem Datenbankserver kann nicht wirklich zu viel RAM vorhanden sein. Vielleicht nicht, aber Sie können RAM haben, für das Sie Geld verschwendet haben, weil es nicht verwendet wird. Obwohl ich der allgemeinen Idee zustimme, dass es sich lohnt, großzügig mit Kisten umzugehen, die bestimmte Aufgaben ausführen, geht es meiner Meinung nach nicht darum, Ressourcen in ein System zu werfen, ohne dessen Anforderungen zu verstehen.
Rob Moir
2
@robert: Es ist nicht so, als würde ich den Kauf eines Blade-Servers befürworten. Das Maximieren des Arbeitsspeichers auf einem Server ist ziemlich einfach. Wenn Ihnen der Arbeitsspeicher ausgeht, können Sie dann weitere hinzufügen. Ich denke, das Problem liegt wahrscheinlich in seinem Code, aber wenn Sie das Problem mit ein paar hundert Dollar RAM beheben können, ist es eine effiziente Verwendung von Geld.
Satanicpuppy
1
@ Robert: Ich stimme zu. Aber ich habe zu oft Leute gesehen, die Tausende für Programmierer und Berater ausgegeben haben, um ein Softwareproblem zu beheben. Wenn Sie ein bisschen mehr Hardware darauf werfen, ist das für einen Bruchteil der Kosten das Gleiche.
Satanicpuppy
1
6 Gigs ist eine gute Größe SQL Server-Speicherkonfiguration? Sie haben einige ziemlich kleine Server verwendet. Ich habe Boxen mit 256 Gigs installiert und Freunde mit 512 Gigs. 6 Gigs ist nichts.
Mrdenny
1
@ mdmarra: Eh. Im Jahr 2012 sicher. In 2009? Nicht so viel.
Satanicpuppy
4

Bevor Sie mehr Speicher (oder eine andere Komponente) kaufen, sollten Sie eine Leistungsanalyse auf dem Server durchführen. Sie können dies mit perfmon selbst tun oder Tools von Drittanbietern verwenden. Sie sollten die Leistung des Betriebssystems und des SQL-Servers analysieren. IMHO, zu oft sind wir bereit, Hardware auf ein Problem aufmerksam zu machen, bevor eine ordnungsgemäße Analyse durchgeführt wurde. Nach allem, was Sie an diesem Punkt wissen, kann es sich um ein Problem mit einer Abfrage, einer gespeicherten Prozedur, einem Ausführungsplan, einer Datenträger-E / A, einer CPU-Auslastung usw. handeln. Der Speicherdruck kann häufig ein Symptom für einen anderen Engpass im System sein.

Joeqwerty
quelle
1

Wie "Satanicpuppy" sagte, gibt es nicht so etwas wie zu viel RAM, aber 6 GB sollten in Ordnung sein. Vielleicht sollten Sie überlegen, was Ihr Server macht. Ich denke nicht, dass Sie ein "Hardware" -Problem haben, das sollten Sie Konzentrieren Sie sich auf Ihre SQL-Programmierung ...

Remus Rigo
quelle
1

Wenn es um Datenbankserver geht, gibt es nicht genügend Arbeitsspeicher. Sicher, es hängt davon ab, was sie tatsächlich tun und ausführen, aber wenn es sich um eine ständig genutzte Datenbank handelt, die viele Daten enthält und komplizierte Abfragen ausführt, können 6 GB durchaus unangemessen sein.

Ich würde damit beginnen, einen problematischen Server auf mindestens 32 oder 64 GB zu aktualisieren und herauszufinden, ob dies hilft. Wenn nicht, wenden Sie sich an die Datenbankoptimierung, die Fehlerbehebung bei Anwendungen und das Debugging. Dies alles kostet, sofern nicht ein Idiot die Datenbank entworfen hat, viel mehr als ein paar Sticks mit Arbeitsspeicher auf Serverbasis (und selbst wenn ein Idiot das Ding entworfen hat, wird das Design noch offensichtlicher) Fehler, die mit Unterstützung behoben wurden, könnten sich als ziemliche Herausforderung erweisen.

Das heißt, wie jemand anderes sagte - es könnte etwas anderes sein, das es zurückhält (abgesehen von Software-Design-Problemen), wie ein Mangel an Festplatten- oder Netzwerk-E / A-Leistung - einen DBA-Profi einzustellen, der nur die grundlegende SQL-Leistungsüberwachung für einen ausführt Tag könnte sich als nützlich erweisen.

Oskar Duveborn
quelle
0

Sie sollten mehr Indizes erstellen. Ich denke, dass im Allgemeinen die meisten Leute ihre Datenbank unterindizieren.

Dies ist immer noch ein Luftcode, den ich noch nicht vollständig getestet habe, aber er sollte Sie in die richtige Richtung bringen

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
quelle