Đưa Oracle làm lại nhật ký trên SSD DRAM cho cơ sở dữ liệu ghi nặng?


9

Tôi có Sun M4000 được kết nối với mảng EMC CX4-120 với cơ sở dữ liệu nặng. Viết đỉnh ở khoảng 1200 IO / s và 12MB / s.

Theo EMC, tôi đang bão hòa bộ đệm ghi trên mảng EMC.

Tôi nghĩ giải pháp đơn giản nhất là chuyển các bản ghi làm lại sang SSD dựa trên DRAM. Điều này sẽ giảm một nửa tải cho mảng EMC và các ứng dụng sẽ không thấy bộ đệm nhật ký chờ. Đúng, DBWR có thể trở thành nút cổ chai, nhưng các ứng dụng sẽ không chờ đợi nó (giống như chúng làm trên các cam kết làm lại!)

Tôi hiện đang quay vòng qua khoảng 4 bản ghi làm lại 4GB, do đó, ngay cả SSD 20 GB hoặc hơn sẽ tạo ra sự khác biệt lớn. Vì đây là bộ nhớ ngắn hạn và liên tục bị ghi đè, SSD dựa trên Flash có lẽ không phải là một ý tưởng tuyệt vời.

M4000 không có nhiều ổ đĩa bổ sung, vì vậy thẻ PCI-E sẽ rất hoàn hảo, tôi có thể ra ngoài hoặc di chuyển khối lượng khởi động sang EMC và giải phóng các ổ đĩa cục bộ.

Sun bán thẻ Flash Speedator F20 PCIe, nhưng đó dường như là bộ đệm cho một số đĩa SATA, không phải là giải pháp DRAM SSD. Chi tiết còn sơ sài, nó không liệt kê M4000 là được hỗ trợ và tôi mệt mỏi khi phải chiến đấu với cây điện thoại của Sun để tìm kiếm sự giúp đỡ của con người. :

Những người khác có đồng ý rằng SSD DRAM là con đường để đi? Bất kỳ khuyến nghị phần cứng?

CẬP NHẬT Ngoài thông tin trong một bình luận bên dưới, tôi đã thử nhiều cài đặt khác nhau cho "commit_write" và nó không tạo ra sự khác biệt.


Bạn đang lưu trữ nhật ký ở đâu đó? Nếu cuối cùng chúng cần được sao chép từ SSD sang đĩa thì bạn có thể chuyển nút cổ chai sang lưu trữ.
Gary

Có ... các bản ghi làm lại đang được lưu trữ và IO thực sự tăng lên khoảng 80MB / s trong quá trình sao chép bản ghi lại vì đó là bản ghi tuần tự. Tôi luôn nghĩ làm lại nhật ký là tuần tự, nhưng đoán không.
rmeden

Câu trả lời:


9

Đầu tiên - tôi đoán bạn có rất ít đĩa trong mảng. 1200IOPS có thể dễ dàng được hỗ trợ là 12 đĩa quay (100 IOPS mỗi đĩa là rất hợp lý). Nếu bộ đệm không thể xử lý được, điều đó có nghĩa là tốc độ ghi được duy trì 1200 IOPS của bạn cao hơn nhiều so với các ổ đĩa của bạn có thể hỗ trợ.

Dù sao, SSD để làm lại nhật ký không có khả năng giúp đỡ. Đầu tiên, phiên của bạn có chờ đợi chủ yếu trên câu lệnh CAMIT không? Kiểm tra các sự kiện chờ đợi hàng đầu trong statspack / AWR để xác minh. Tôi đoán ~ 95% số I / O của bạn hoàn toàn không phải là bản ghi lại. Ví dụ: một hàng đơn lẻ chèn vào một bảng có 5 chỉ mục có thể thực hiện 1 I / O để đọc một khối bảng (có không gian cho hàng), đọc 5 khối chỉ mục (để cập nhật chúng), viết 1 khối dữ liệu, 1 hoàn tác khối và 5 khối chỉ mục (hoặc nhiều hơn, nếu các khối không có lá được cập nhật) và 1 khối làm lại. Vì vậy, hãy kiểm tra số liệu thống kê và xem các sự kiện chờ đợi của bạn, có thể bạn đang chờ đợi rất nhiều cả ĐỌC và VIẾT cho dữ liệu / chỉ mục. Chờ đợi để đọc làm chậm INSERT và hoạt động WRITE làm cho READ thậm chí chậm hơn - đó là cùng một đĩa (BTW - bạn có thực sự cần tất cả các chỉ mục không? Thả những người không phải sẽ tăng tốc độ chèn).

Một thứ khác để kiểm tra là định nghĩa RAID - đó là RAID1 (phản chiếu - mỗi lần ghi là hai lần ghi) hoặc RAID 5 (mỗi lần ghi là 2 lần đọc và hai lần ghi để tính toán tổng kiểm tra). RAID 5 chậm hơn trong việc tải dữ liệu ghi.

BTW - nếu các đĩa không thể tải được ghi, DBWR sẽ là nút cổ chai. SGA của bạn sẽ đầy các khối bẩn và bạn sẽ không còn chỗ để đọc các khối mới (như các khối chỉ mục cần được xử lý / cập nhật) cho đến khi DBWR có thể ghi một số khối bẩn vào đĩa. Một lần nữa, hãy kiểm tra số liệu thống kê / báo cáo awr / addm để chẩn đoán nút thắt cổ chai, thường dựa trên 5 sự kiện chờ đợi hàng đầu.


1
+1 - và tôi sẽ cho nó +10 nếu có thể.
Helvick

2
+1 cho lời khuyên để thực sự thấy nút thắt ở đâu.
DCookie

Các chờ đợi là "đồng bộ hóa tệp nhật ký" và "không gian bộ đệm nhật ký". Tôi có thể đạt được khoảng 150MB / s cho âm lượng bằng DD. Tôi nghi ngờ LGWR đang chờ IO hoàn thành trước khi gửi cái tiếp theo. Thời gian phục vụ IO khoảng 1ms. EMC có bộ nhớ cache khổng lồ 500 MB, theo EMC không thể tăng lên khi nâng cấp toàn bộ hộp. Chúng tôi có 22 TB trong mảng, tại sao họ sẽ cung cấp một cái gì đó với rất ít bộ nhớ cache nằm ngoài tôi. Nhật ký làm lại hiện đang ở trong RAID 5 rộng 5, nhưng không có sự khác biệt với RAID 10 (một lý do khác để nghi ngờ bộ đệm)
rmeden

BTW, nếu có thêm bộ đệm, đĩa vẫn có thể không theo kịp. Bằng cách di chuyển REDO khỏi mảng EMC, giải phóng dung lượng cho các đĩa dữ liệu và giảm một nửa I / O. Một ổ SSD DRAM nhỏ có thể là ổ đĩa hiệu năng cao, rẻ nhất vì nó có thể nhỏ.
rmeden

meden - Oracle viết lại bao nhiêu mỗi giây? bạn đã nói tổng I / O là 12 MB / s và 1200 IOPS, điều đó có nghĩa là rất nhiều IO nhỏ (trung bình 10KB). Nếu bạn di chuyển các bản ghi làm lại sang SSD, bạn sẽ chỉ thấy các sự kiện chờ khác nhau vì DBWR sẽ trở thành nút cổ chai và INSERT sẽ đợi bộ đệm miễn phí trong SGA. Vui lòng kiểm tra - bạn có loại RAID nào, kích thước sọc và kích thước khối Oracle là gì (cũng vậy, các tệp dữ liệu của bạn có bị sọc trên tất cả các đĩa không?). Ngoài ra, hãy kiểm tra số liệu thống kê nguồn cho hầu hết các I / O - đó là làm lại hoặc một số thứ khác - kiểm tra I / O trên mỗi vùng bảng
Ofir Manor

2

dd không là gì so với khối i / o.

Đối với một số quan điểm khác, hãy kiểm tra xung quanh, anandtech.com đã thực hiện một thử nghiệm vượt trội (được cấp với máy chủ MS SQL) với SAS xoay so với SSD, trong các kết hợp khác nhau và thế giới Solaris có ZFS với SSD tạo thành nhiều phần khác nhau (nhật ký, bộ đệm, v.v. ).

Nhưng có, nếu RAID 5 so với RAID 10 giống nhau (đối với ghi), bạn đang làm sai điều gì đó. Với ghi tuyến tính, RAID 5 có thể nhanh hơn (nghĩa là nó có thể thực hiện tính chẵn lẻ trong bộ nhớ, sau đó viết các sọc và chẵn lẻ cùng một lúc), nhưng với khối nhỏ ngẫu nhiên (4-8k), bạn sẽ bị giết bằng cách cập nhật các sọc (như lưu ý bởi những người khác), cuộc đột kích 10 nên nhanh hơn gấp 2 lần, nếu không, có gì đó không ổn.

Bạn cần đào sâu hơn, trước khi bạn chi tiền cho phần cứng.


2

Tôi đã thấy một bài đăng về việc gắn các phân vùng UFS bằng cách sử dụng tùy chọn "cưỡng bức" và đặt tham số Oracle "filesystemio_options" thành "setall".

Tôi đã thử nó và thấy một sự cải thiện 4-5 lần trong Oracle write! Vâng!

Các triệu chứng chính là thông lượng thấp nhưng thời gian đáp ứng tốt trên đĩa. Điều này dường như để giúp một số người nhưng không phải những người khác. Nó chắc chắn đã làm công việc cho tôi.

Tôi có thể xem xét SSD cho các máy chủ mới, nhưng máy chủ này hiện đang chạy tốt.

Robert


Rất có thể việc tăng tốc mà bạn gặp phải không phải do bật I / O trực tiếp, mà bằng cách bật I / O không đồng bộ. Trong Oracle, setall có nghĩa là trực tiếp + không đồng bộ.
kubanchot

1

Nếu hộp này chỉ là một hộp x86 / 64 chạy linux, tôi đã vui vẻ giới thiệu một trong các thẻ ổ đĩa FusionIO PCIe - chúng nhanh đến mức đáng kinh ngạc và không 'chết' với việc ghi nặng như SSD. Thật không may, họ không được hỗ trợ với Sparc hoặc Solaris, bạn có thể muốn liên hệ với họ để thảo luận về vấn đề này.


1

Thẻ PCIe F20e tương tự như chức năng Fusion I / O. Về cơ bản, nó chỉ là một ổ SSD Flash kèm theo PCIe. Với khối lượng công việc nặng nề, bạn sẽ cần lo lắng cả về việc duy trì đủ khối miễn phí (thông qua bộ sưu tập rác dựa trên ổ đĩa nào đó) để bạn không gặp phải chu trình Xóa / Chương trình trên SSD trở thành nút cổ chai, cũng như các chu kỳ ghi hạn chế có sẵn trên ổ SSD dựa trên Flash. Nó chắc chắn nhanh, nhưng có thể không phải là bộ tốt nhất cho công việc này.


John Tôi không nghĩ rằng nó sẽ làm việc cho tôi. Sun thậm chí không hỗ trợ nó trên M4000. :(
rmeden
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.