Có bao nhiêu lựa chọn mỗi giây một máy chủ mysql có thể chạy?


19

Tôi đang viết một kế hoạch kinh doanh và tôi phải mô phỏng chi phí khi trang web của tôi sẽ đạt được từ 500.000 khách truy cập.

  • khách truy cập: 500.000
  • số lượt xem trang: 1.500.000
  • lượt xem trang của nhện: 500.000
  • tổng số lượt xem trang: 2.000.000

Mỗi trang thực hiện 50 truy vấn + -

  • truy vấn mỗi ngày: 100 triệu
  • mỗi giờ: 4 triệu
  • mỗi phút: 70.000
  • mỗi giây: 1.200
  • cao điểm: 3.000

Thực hiện phép tính này tôi cần 3.000 truy vấn thứ hai ... loại máy chủ nào có thể xử lý nó?

Vấn đề là: thực sự trang web của tôi đang thực hiện 2.000 lượt truy cập mỗi ngày và có - + 150/200 truy vấn / giây ... bắt đầu từ thời điểm này tôi sẽ mong đợi 50.000 truy vấn / giây.

Có bao nhiêu máy chủ tôi cần trong cụm hoặc nhân rộng để quản lý công việc này?


5
Những loại trang web nào 8k + truy vấn một lượt truy cập?
Ignacio Vazquez-Abrams

5
Bạn cần xem xét thiết kế hệ thống ngay lập tức.
Chopper3

1
Không nơi nào đủ thông tin, bởi vì bạn đã không cho chúng tôi biết gì về những gì thực sự quan trọng - chính các truy vấn. Cũng không phải nói với chúng tôi về máy bạn đang chạy. Đây có phải là 486 không? Siêu máy tính mới nhất và lớn nhất hoặc một cái gì đó ở giữa? Tất cả những con số bạn đã liệt kê là không liên quan đến câu hỏi. Vui lòng cung cấp thông tin LIÊN QUAN.
John Gardeniers

> 8k + truy vấn loại truy cập nào của trang web? Tôi nhận được 2000 khách truy cập duy nhất nhưng mỗi khách truy cập mở nhiều trang, + tôi có rất nhiều nhện bên trong. 2000 người dùng duy nhất đang tạo ra 6000 ips duy nhất mở hơn 120.000 trang được mở hàng ngày. cảm ơn

Câu trả lời:


22

Tôi từng làm việc cho một công ty thương mại điện tử với một trang web có vài triệu lượt truy cập trang mỗi ngày. Chúng tôi đã có một DELL PE 1750 với 2 CPU lõi đơn và 2GB RAM, kích thước cơ sở dữ liệu xấp xỉ. 4GB. Vào những lúc cao điểm, máy chủ này xử lý tới 50k + truy vấn mỗi giây.

Đã nói điều này: cơ sở dữ liệu được cấu trúc tốt, tất cả các truy vấn đều được tinh chỉnh (chúng tôi có các phiên hàng tuần phân tích nhật ký truy vấn chậm và sửa các truy vấn và chỉ mục) và thiết lập máy chủ cũng được tinh chỉnh. Bộ nhớ đệm chắc chắn là một ý tưởng tốt, nhưng dù sao thì MySQL cũng phải phân tích hiệu năng và sau đó tinh chỉnh cách sử dụng bộ nhớ của bạn (truy vấn bộ đệm so với các tùy chọn khác).

Từ kinh nghiệm đó tôi có thể nói với bạn rằng tác động cao nhất là do thiếu chỉ mục, chỉ mục sai và thiết kế cơ sở dữ liệu xấu (ví dụ: các trường chuỗi dài làm khóa chính và vô nghĩa tương tự).


8

Tất cả phụ thuộc vào mức độ phức tạp của truy vấn và dung lượng bộ nhớ của máy chủ và tốc độ của các đĩa.

Nếu các truy vấn rất đơn giản, hoặc được điều chỉnh rất tốt thì một máy chủ cơ sở dữ liệu lớn có thể xử lý việc đó. Tuy nhiên, nếu các truy vấn rất phức tạp (hoặc đơn giản nhưng được điều chỉnh kém) thì bạn sẽ cần một vài máy chủ.


Hoặc một số thay đổi lược đồ nghiêm trọng và giới thiệu lại ...
Massimo

3
Điều chỉnh LUÔN LUÔN được ưu tiên hơn việc thêm nhiều phần cứng. Thêm nhiều phần cứng chỉ che giấu vấn đề cho đến khi vấn đề khó giải quyết hơn nhiều.
mrdenny

Cảm ơn câu trả lời, vì vậy tôi nghĩ rằng 2 máy chủ song song + 1 thụ động để phục hồi sẽ ổn, phải không? Tôi đang nói về các máy chủ lõi tứ 2x với 32 g ram và ổ đĩa nhanh. tôi có đúng không hãy nhớ rằng tôi cần biểu diễn!

1
mọi thứ đều được điều chỉnh và lập chỉ mục tốt, tôi có 1 hoặc 2 truy vấn chậm mỗi tuần (và thời gian truy vấn chậm chỉ là 2 giây) dù sao tôi cũng đang viết một kế hoạch kinh doanh và tôi muốn biết loại máy chủ nào có thể quản lý 12.000.000 trang được mở tạo hàng ngày với 8000 truy vấn / giây

8000 truy vấn một giây không phải là nhiều. Một máy chủ 16 lõi duy nhất có thể sẽ thực hiện thủ thuật. 64 Gigs RAM (hoặc nhiều hơn hoặc ít hơn tùy thuộc vào cơ sở dữ liệu lớn như thế nào và bao nhiêu dữ liệu cần được giữ trong bộ nhớ cache bất cứ lúc nào) nên thực hiện thủ thuật này. DB của tôi (được cấp SQL Server) là 1 TB trên máy chủ RAM 16 lõi 64 Gig với 40-50k người dùng truy cập hàng ngày lên đến vài lần mỗi phút (mỗi lần) trong suốt cả ngày.
mrdenny

3

Điều này thực sự không thể ước tính mà không biết gì về các truy vấn cụ thể bạn đang chạy, sơ đồ cơ sở dữ liệu và kích thước của nó.

Một đơn giản SELECT trên một cột được lập chỉ mục là khá một con thú khác nhau từ một vài tham gia dựa trên loại hình ngoài được lập chỉ mục ... và tất nhiên mọi thứ thay đổi rất nhiều nếu các bảng có liên quan chứa 1K hồ sơ hoặc 1M.

Cũng thế:

  • Cấu hình phần cứng hiện tại của bạn là gì?
  • Máy chủ của bạn sử dụng bao nhiêu năng lượng (CPU, RAM, Đĩa I / O) theo tải hiện tại?

Trên thực tế tôi có một máy chủ với lõi tứ 2x với 8 GB ram. Tôi đang sử dụng ram đầy đủ và 100% bộ xử lý (có vẻ như tôi có thể sử dụng 800%, xem tại đây :) cpu: img834.imageshack.us/img834/3483/doadv.png ram: img442.imageshack.us/i/ download2p.png đĩa: img213.imageshack.us/i/doad1x.png cảm ơn

Dựa trên các biểu đồ đó, bạn chỉ sử dụng một (hoặc nhiều nhất là hai) lõi CPU của mình; vì vậy ứng dụng của bạn chắc chắn không bị ràng buộc bởi CPU ... hoặc là vậy, nhưng không thể tận dụng được nhiều CPU. Ngoài ra, tất cả bộ nhớ được sử dụng cho "bộ đệm" không phải ai cũng cần thiết , đó chỉ là hệ điều hành tận dụng lợi thế của nó vì "nó ở đó".
Massimo

Làm thế nào tôi có thể tìm thấy thông tin về việc sử dụng tất cả các lõi cpu? Tôi đang sử dụng đèn ...

Trước hết, bạn nên kiểm tra xem bạn có sử dụng chúng không vì không cần chúng (= tải thấp), bởi vì các hoạt động của bạn không thể được song song chính xác hoặc do MySQL và / hoặc Apache của bạn không được định cấu hình sử dụng chúng. Và, vì hai chương trình này thường được đa luồng theo mặc định, tôi sẽ xem xét tải máy chủ của bạn và truy vấn SQL của bạn ...
Massimo

3

Như Ignacio đã nhận xét, bạn có thể muốn xem xét bộ nhớ đệm. Trong cms hoặc có lẽ ngay cả trước ngăn xếp. Hơn 50 truy vấn cho mỗi trang (mỗi!) Thực sự là rất nhiều.


vâng, đây là một trang web phức tạp, nó là một cộng đồng, tôi không thể lưu trữ bất cứ thứ gì, nó thay đổi từng giây. Tôi đã cố gắng lưu các trang vào bộ đệm, nhưng số lần truy cập bộ đệm là gần 0, vì mỗi lần tôi lưu một trang, nó có thể không bao giờ được đọc lại hoặc có thể thay đổi trước khi mở lại. cảm ơn

4
Có rất ít trang web không thể truy cập; nếu nó chỉ thay đổi mỗi giây, bạn vẫn có thể lưu trong bộ nhớ cache trong một giây, như 10 lần xem trang ;-) Bạn đã xem xét không lưu bộ nhớ cache toàn bộ trang, mà là các khối hoặc giá trị cụ thể, v.v.? Bạn có thể lưu trữ bên ngoài cơ sở dữ liệu, trên các phân đoạn bộ nhớ dùng chung, hệ thống tệp, memcached. Ngoài ra, thông thường trong tình huống như vậy ESI có thể hữu ích
Joris

0

Đánh giá theo nhận xét của bạn, yếu tố lớn nhất sẽ là kích thước tập dữ liệu của bạn hoặc ít nhất là kích thước của tập dữ liệu "nóng". 3.000qps hoặc thậm chí 8.000qps trên máy chủ 16 lõi hoàn toàn không phải là vấn đề miễn là máy chủ hiếm khi phải vào đĩa để đáp ứng truy vấn. Khi bộ dữ liệu hoạt động vượt quá dung lượng bộ nhớ mà InnoDB đang sử dụng để lưu trữ bộ đệm, hiệu suất của bạn sẽ giảm xuống nhanh chóng.


0

Đối với các bộ dữ liệu "nóng" lớn, có lẽ đáng để đầu tư kịp thời để chuyển đổi sang sơ đồ "dữ liệu lớn", đó là những gì chúng dành cho. Ví dụ: nếu bạn có một lượng lớn dữ liệu cần truy xuất, nhưng bạn không bao giờ viết lại mà chỉ nối thêm dữ liệu mới, hãy xem Apache Hive. Duyệt xung quanh, chúng thường là một hương vị bạn có thể giao tiếp đủ dễ dàng với mã hiện có, điều đó cũng sẽ ngăn chặn sự ợ nóng khi hết dung lượng bộ nhớ cache.


0

Có quá nhiều thứ có thể ảnh hưởng đến truy vấn của bạn mỗi giây, vui lòng không tin tưởng vào dữ liệu của tôi mà không tự kiểm tra. Tôi đăng kết quả kiểm tra tốc độ của mình lên đây để giúp ai đó ước tính qps với cơ sở dữ liệu và máy mysql hiện tại (2018-09). Trong thử nghiệm của tôi, kích thước dữ liệu nhỏ hơn bộ nhớ máy chủ (điều đó làm giảm đáng kể IO và tăng cường hiệu năng rất nhiều).

Tôi sử dụng một bộ nhớ cpu 3,75GB, ssd 100GB, gcp đám mây máy chủ mysql và nhận:

  • 1 khách hàng, một sql một hàng đọc: 799 sql / giây.
  • 50 khách hàng, một sql một hàng đọc: 6403 sql / giây.
  • 50 khách hàng, một sql một hàng viết: 4341 hàng viết, qps. 4341 sql / giây.
  • 1 khách hàng, 30k hàng ghi trên mỗi sql: 92109 hàng viết / s.

ghi kết quả kiểm tra qps (2018-11) gcp mysql 2cpu Bộ nhớ 7.5GB Bộ nhớ tuần tự ssd 150GB ghi 10 luồng, ghi 30k hàng trên mỗi sql, bảng 7.0566GB, độ dài khóa dữ liệu là 45 byte và chiều dài giá trị là 9 byte, nhận được hàng 154KB mỗi giây, cpu 97,1% ghi qps 1406 / s trong bảng điều khiển gcp.
người đàn ông bằng đồng
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.