2009-03-06 19 views
11

Chúng tôi đang gặp một số vấn đề với SQL Server sản xuất của chúng tôi.Áp dụng bộ nhớ SQL Server 2005 và tempdb viết vấn đề

Server: kép Quad Core Xeon 8 GB RAM Độc RAID 10 mảng Windows 2003 Server 64-bit SQL Server 2005 Standard 64-Bit

Có khoảng 250MB RAM miễn phí trên máy tính này ngay bây giờ . SQL Server có khoảng 6GB RAM, và phần mềm giám sát của chúng tôi nói rằng chỉ một nửa số máy chủ SQL được cấp phát RAM thực sự đang được sử dụng.

Cơ sở dữ liệu chính của chúng tôi là khoảng 20 GB, với khoảng 12 GB được sử dụng với bất kỳ tần suất nào. Tempdb của chúng tôi là 700MB. Cả hai đều nằm trên cùng một mảng đĩa vật lý.

Ngoài ra, bằng cách sử dụng Filemon, tôi đã có thể thấy tệp tempdb có 100 hoặc 1000 ghi độ dài 65536. Độ dài hàng đợi đĩa trên 100 gần 80% thời gian.

Vì vậy, đây là một thắc mắc nào của tôi

  1. Điều gì sẽ gây ra tất cả những ghi trên tempdb? Tôi không chắc liệu chúng tôi có luôn luôn có nhiều hoạt động đó không, nhưng có vẻ như quá nhiều và những vấn đề này gần đây.

  2. Tôi có nên thêm nhiều bộ nhớ hơn cho máy chủ không?

  3. Trên máy chủ tải cao, các tệp tempdb và db phải được đặt trên các mảng riêng biệt?

+0

Chúng tôi có một mảng RAID-10 với phụ tùng nóng. Chúng tôi đã mua phụ tùng nóng khi chúng tôi gặp sự cố khi mất đĩa, nhưng những vấn đề đó đã được khắc phục và không có vấn đề gì trong hơn một năm. Việc tạo một đĩa mới (không có RAID) trên đĩa dự phòng có phải là một sửa chữa nhanh để cải thiện hiệu suất tempdb không? – Brian

Trả lời

7

Độ dài hàng đợi đĩa cao không có nghĩa là bạn có nút cổ chai I/O nếu bạn có SAN hoặc NAS, bạn có thể muốn xem các bộ đếm bổ sung khác. Hãy xem SQL Server Urban Legends discussed để biết thêm chi tiết.

1: Các hoạt động sau nhiều sử dụng tempdb

  • Lặp đi lặp lại tạo và thả các bảng tạm thời (địa phương hay toàn cầu)
  • Bảng biến có sử dụng tempdb cho mục đích lưu trữ
  • bảng
  • Work được liên kết với con trỏ
  • Bàn làm việc được kết hợp với mệnh đề ORDER BY
  • Bàn làm việc được liên kết với mệnh đề GROUP BY
  • file Work được liên kết với HASH KẾ HOẠCH

Những tính năng SQL Server 2005 cũng sử dụng tempdb nặng nề:

  • cấp hàng versioning (snapshotisolation)
  • index trực tuyến tái xây dựng

Như được đề cập trong các câu trả lời khác của SO, đọc this article về cách thực hành tốt nhất để tăng hiệu suất tempdb.

2: Xem số lượng RAM miễn phí trên máy chủ nghĩa là xem bộ nhớ WMI-> Mbytes có sẵn không giúp SQL Server sẽ lưu các trang dữ liệu trong RAM, vì vậy bất kỳ máy chủ db nào đang chạy đủ dài sẽ có ít RAM miễn phí.
Các quầy bạn nên nhìn vào đó có ý nghĩa hơn trong nói cho bạn nếu thêm RAM cho máy chủ sẽ giúp là:
SQL Server Instance: Buffer Manager-> Trang Tuổi thọ (tính bằng giây) Một giá trị dưới 300- 400 giây sẽ có nghĩa là Trang không có trong bộ nhớ rất dài và dữ liệu liên tục được đọc từ đĩa. Máy chủ có tuổi thọ trang thấp sẽ được hưởng lợi từ RAM bổ sung.

SQL Server Instance: Buffer Manager-> Buffer cache hit Ratio này cho bạn biết phần trăm trang được đọc từ RAM mà không phải gánh chịu đọc từ đĩa, một bộ nhớ cache tỷ lệ hit hạ rồi 85 sẽ có nghĩa là máy chủ sẽ được hưởng lợi từ RAM bổ sung

3: Có, không thể xảy ra lỗi ở đây.Có tempdb trên một bộ đĩa riêng biệt được khuyến khích. Nhìn vào this KB article dưới tiêu đề: Di chuyển cơ sở dữ liệu tempdb về cách thực hiện việc này.

+0

đã đánh giá Tỷ lệ truy cập trang của Life Expectancy và Buffer Cache (không chắc tại sao tôi không nghĩ về điều này, vì trước đây tôi đã gặp vấn đề về bộ nhớ). Tuổi thọ trung bình của trang là 74000 và bộ đệm Cache là 99,85. Khá chắc chắn đó có nghĩa là nó không phải là một vấn đề bộ nhớ! – Brian

+0

Biến ra một chỉ mục mất tích duy nhất đã gây ra mọi vấn đề của tôi - tôi có thể xem hàng đợi đĩa, đĩa sec/ghi và đĩa sec/đọc giảm mạnh thứ hai tôi đã tạo chỉ mục. Các kết quả từ một bảng 3 triệu hồ sơ đã được sắp xếp trong tempdb từ những gì tôi có thể nói. – Brian

3

xuất sắc câu hỏi, 1

tempdb được sử dụng cho đến nay nhiều hơn trong SQL 2005 +. Ít nhất: mức cô lập Snapshot, chỉ số trực tuyến xây dựng lại, đọc chèn/xóa trong trigger

này ngoài trình tự thông thường bằng khoản, bảng tạm thời, vv

Bạn (được sử dụng để đọc các tập tin đăng nhập!) 'd có lẽ là tốt hơn tách nhật ký của bạn và các tập tin dữ liệu (cũng cho khả năng phục hồi). Nhiều bộ nhớ luôn tốt nhưng hãy xem điều này 64 bit specific stuff, Grumpy Old DBA bên dưới.

Cuối cùng, và có lẽ quan trọng nhất có lẽ, bạn có thể có tranh chấp về việc phân bổ không gian trong tempdb: Giải thích từ Linchi SheaSQL Server storage team

Cuối chỉnh sửa:

Paul Randall thêm một mục "Comprehensive tempdb blog post series" trong đó cung cấp tốt liên kết

0
  1. Ghi vào tempdb có thể là bất kỳ thứ gì. Bảng băm nội bộ, bảng tạm thời, biến bảng, cuộc gọi thủ tục được lưu trữ, v.v.

  2. Nếu bạn chỉ có 250 Megabyte RAM miễn phí, thì sẽ có nhiều RAM hơn.

  3. Bạn luôn nên chia tách cơ sở dữ liệu người dùng và tempdb thành các đĩa khác nhau.

Tất cả ghi vào tempdb sẽ có kích thước 64k vì đó là kích thước của từng cấp cơ sở dữ liệu.

3

Không trực tiếp trả lời câu hỏi của bạn nhưng đây có thể là một mẹo hay: Khởi động lại phiên bản SQL Server của bạn sẽ xóa tempdb, đây có thể là một khởi đầu tốt khi điều tra các hành động được thực hiện trên tempdb.

+0

cảm ơn mẹo! tôi không biết tại sao tôi không nghĩ về điều này. – Brian

Các vấn đề liên quan