Tôi có thể chứa toàn bộ DB trong bộ nhớ không?


9

Cơ sở dữ liệu của tôi có kích thước khoảng 1gb (theo tệp mdf của db của tôi). Máy chủ cơ sở dữ liệu của tôi có 4gb ram. Nhìn vào mức tiêu thụ bộ nhớ trên máy tính khi hoạt động, nó chiếm khoảng 85% được sử dụng (bao gồm cả hệ điều hành, v.v.)

Điều này có nghĩa là tất cả hoạt động đọc DB chỉ hoạt động trong bộ nhớ (tức là toàn bộ db đang ngồi trong bộ nhớ)? hoặc vẫn còn một trường hợp nó sẽ phải đi vào đĩa?


1
Chà, để so sánh, việc sử dụng khi ứng dụng không hoạt động là gì? Nói chung, một trong những lợi ích của hệ thống cơ sở dữ liệu là nó không cần tệp đầy đủ trong bộ nhớ, nhưng nó sẽ phù hợp với những gì bạn rút ra khỏi bộ nhớ cho đến khi bạn xóa nó đi nơi khác. Tôi sẽ phải tuyên bố 'không'.
Grant Thomas

@Ông. Thất vọng: Tôi đồng ý rằng đó là một lợi ích, nhưng trong trường hợp nó có thể đặt toàn bộ tệp vào bộ nhớ (như trường hợp này), thì có được không?

Nếu nó cần, thì có. Nhưng theo yêu cầu của người gọi và dữ liệu họ yêu cầu, không phải là vấn đề tất nhiên. Vì vậy, thông thường, nếu bạn gặp vấn đề về bộ nhớ cơ sở dữ liệu, nó sẽ là với mã gọi hoặc phần mềm hỗ trợ hoặc hỗn hợp cả hai.
Grant Thomas

1
Một ví dụ cho quan điểm: Tôi biết một công ty internet rất lớn sở hữu một số trang web cổng thông tin rất lớn. Họ giao ca. 300 triệu quảng cáo từ các trình quảng cáo của riêng họ cho các cổng đó. Cấu trúc của các máy chủ quảng cáo sao cho có một Oracle DB lớn với tất cả thông tin cho kế toán và nhắm mục tiêu, nhưng có 32 máy chủ lớn (RAM 32 GB) chứa cơ sở dữ liệu nhỏ hơn (chỉ có quảng cáo hiện đang hoạt động) trong RAM . Họ không chạm vào đĩa, họ không được: họ chỉ có 1/1000 giây để tìm quảng cáo để đặt khi truy vấn cho nó, mọi truy cập đĩa sẽ khiến mục tiêu đó không thể đạt được.

Câu trả lời:


5

Có, toàn bộ cơ sở dữ liệu có khả năng được lưu trữ trong bộ nhớ. Nó sẽ xả các trang bẩn vào đĩa theo các khoảng thời gian kiểm tra. Lưu ý rằng tất cả các bản cập nhật sẽ phải ghi vào nhật ký và đợi bản ghi nhật ký được làm cứng trên bộ lưu trữ bền trước khi cam kết. Khái niệm cơ bản về I / O SQL Server 2000 cũ này có tất cả các chi tiết bạn cần và hơn thế nữa.

Nhưng bạn không cần phải đoán, bạn có thể đo chính xác điều này và xem liệu nó có xảy ra hay không. Các quầy hiệu suất có liên quan là:

  • Tuổi thọ của trang Số giây mà một trang sẽ ở trong vùng đệm mà không cần tham chiếu.
  • Số lần đọc trang / giây Số lần đọc trang cơ sở dữ liệu vật lý được phát ra mỗi giây. Thống kê này hiển thị tổng số trang vật lý đọc trên tất cả các cơ sở dữ liệu. Vì I / O vật lý đắt tiền, bạn có thể giảm thiểu chi phí, bằng cách sử dụng bộ đệm dữ liệu lớn hơn, chỉ mục thông minh và truy vấn hiệu quả hơn hoặc bằng cách thay đổi thiết kế cơ sở dữ liệu.
  • Trang ghi / giây Số trang cơ sở dữ liệu vật lý ghi mỗi giây.

'Có, toàn bộ cơ sở dữ liệu có khả năng được lưu trữ trong bộ nhớ.' Vì vậy, trong trường hợp máy chủ sản xuất của chúng tôi, với tối thiểu ~ 60 trang web, mỗi trang sử dụng một cơ sở dữ liệu chuyên dụng trong SQL Server Master, trong đó chỉ một số trong số này tương đương với kích thước lớn hơn bộ nhớ có sẵn của máy, cách thức hoạt động của nó ? Tôi muốn nói rằng không có mặc định dứt khoát, hoặc có khả năng xảy ra một trong hai kịch bản - theo nhận xét trước đây tôi đã đưa ra, nó thực sự phụ thuộc nhiều hơn vào môi trường trái ngược với động cơ.
Grant Thomas

@Ông. Thất vọng: bạn đang áp dụng câu trả lời của tôi cho một câu hỏi khác. OP nói : My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Nếu bạn muốn có câu trả lời cho trường hợp khi bạn có 60 trang web và bộ đệm ẩn bộ đệm hoạt động như thế nào trong trường hợp đó, thì hãy hỏi câu hỏi đó :)
Remus Rusanu

Bạn là chuyên gia ở đây, nhưng xin miễn cho bản chất tò mò của tôi: lý thuyết này có giả định không (vì chúng tôi không có dữ liệu cụ thể) rằng máy đang hoạt động khác? Hoặc chiếm một ngưỡng nhất định của bộ nhớ đang được sử dụng bởi người tiêu dùng không xác định?
Grant Thomas

Như tôi đã nói : you don't have to guess, you can measure this exactly.
Remus Rusanu

-5

Toàn bộ DB (tức là dữ liệu) sẽ không được lưu trữ trong bộ nhớ (máy chủ sql). Sau khi kiểm tra các chỉ mục và / hoặc các khóa, nó sẽ truy xuất một con trỏ tới vị trí trong tệp dữ liệu mà dữ liệu bạn đang tìm kiếm và sau đó có thể đi đến đĩa để lấy nó. Nếu không có khóa hoặc chỉ mục, sẽ phải quét toàn bộ heap.

Tùy thuộc vào phiên bản SQL Server nào bạn đang chạy, có thể có các chiến lược để lưu trữ dữ liệu được sử dụng tốt để giảm thiểu việc đọc đĩa.

Bạn CÓ THỂ nhận được các DB trong bộ nhớ, ví dụ: cơ sở dữ liệu MySql Cluster .... Điều này được thiết kế để phù hợp với db ENTIRE vào bộ nhớ trên một cụm máy chủ để phục hồi cao / phục hồi thảm họa và truy xuất dữ liệu nhanh.


1
Tôi không đủ đại diện để bỏ phiếu này nhưng không chắc tại sao bạn lại nói rằng nó sẽ không được lưu trữ trong bộ nhớ. Khi một trang được đọc vào bộ đệm bộ đệm, nó sẽ ở đó cho đến khi áp suất bộ nhớ trong hoặc bên ngoài khiến bộ đệm bị cắt.
Martin Smith
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.