Chúng tôi nhận được dữ liệu GPS thời gian thực với tốc độ khoảng 5000 pr. phút (từ 4 máy chủ TCP). Mỗi máy chủ sử dụng một kết nối duy nhất để chèn dữ liệu và đệm dữ liệu vào giữa các lần chèn. Cứ sau 15 phút, một dịch vụ sẽ lấy dữ liệu này và xử lý nó thành các chuyến đi. Khi các chuyến đi đã được tạo, dữ liệu GPS thực tế thường không quá quan trọng, chỉ khi người dùng muốn xem tuyến đường trên bản đồ.
Vấn đề là dường như cơ sở dữ liệu đang vật lộn để theo kịp tốc độ dữ liệu được chèn vào. Đôi khi khi tải tăng lên, thời gian chèn đột ngột tăng mạnh (> 30 giây), điều này cho phép nhiều dữ liệu được đệm hơn, từ đó dẫn đến việc chèn lớn hơn và thời gian chèn lâu hơn.
Tôi hy vọng sẽ nhận được một số nhận xét về thiết kế hiện tại và một số ý tưởng chúng tôi phải cải thiện hiệu suất và câu trả lời cho một số câu hỏi của chúng tôi - và bất kỳ lời khuyên nào khác mà mọi người có thể có!
Thiết kế hiện hành
Dữ liệu hiện được phân tách thành các bảng biểu thị một tuần và dữ liệu cũ hơn một năm được lưu trữ vào cơ sở dữ liệu thứ cấp. Toàn bộ mọi thứ được nối với nhau trong một khung nhìn có thể chỉnh sửa, được sử dụng cho cả chèn và đọc.
Thiết kế bảng
- Id (PK, định danh duy nhất)
- Thiết bị (FK, int)
- PersonId (FK, int)
- XeId (FK, int)
- TokenId (FK, int)
- UtcTime (PK, datetime2 (3))
- Vĩ độ (nổi)
- Kinh độ (phao)
- Tốc độ (nhỏ)
- Tiêu đề (smallint)
- Vệ tinh (tinyint)
- IOData (phương sai (100))
- IgnitionState (tinyint)
- UserInput (tinyint)
- CreatTimeUtc (datetime2 (3))
Chỉ số
- DeviceId_CreateTimeUtc_Desc
- DeviceId_UtcTime_Desc (Đã nhóm)
- PersonId_UtcTime_Desc
- TokenId_UtcTime_Desc
- XeId_UtcTime_Desc
Mỗi tuần hiện chiếm khoảng 10 GB bao gồm các chỉ số và hiện có khoảng 300 GB dữ liệu trong cơ sở dữ liệu chính.
Các bảng dữ liệu trong cơ sở dữ liệu chính có filegroup riêng với 1 tệp, nhưng nó nằm trên cùng một đĩa với tất cả các bảng khác trong cơ sở dữ liệu chính. Cơ sở dữ liệu thứ cấp nằm trên một đĩa khác, nhưng trên cùng một máy.
Tôi nghĩ rằng chúng tôi cũng đang chạy một công việc xây dựng lại chỉ mục hàng tuần, khi một phân vùng bảng mới (tuần) được sử dụng. Không co lại được thực hiện.
Máy là một HP 8 lõi với bộ nhớ 12 GB và đĩa chứa cơ sở dữ liệu chính đang chạy RAID 10.
Ý tưởng
- Giới hạn số lượng dữ liệu được lưu trữ trong cơ sở dữ liệu chính là tối đa 1 tháng. Ít nhất nó sẽ làm cho cơ sở dữ liệu dễ quản lý hơn để sao lưu / phục hồi, nhưng chúng ta có thể mong đợi để thấy một sự cải thiện hiệu suất bằng cách làm điều này không?
- Tạo 2 tệp trong filegroup cho dữ liệu hiện tại và phân phối chúng vào 2 phân vùng vật lý khác nhau
- Tạo cơ sở dữ liệu chủ-nô chứa dữ liệu hiện tại, do đó việc chèn và đọc được thực hiện trên các cơ sở dữ liệu khác nhau
- Đặt các tệp cho dữ liệu hiện tại trên các đĩa SSD (việc phản chiếu có làm thay đổi hiệu suất với các ổ SSD không?)
Xin vui lòng cho tôi biết nếu cần thêm thông tin. Có rất nhiều yếu tố ảnh hưởng đến hiệu suất, và có lẽ cũng có nhiều cách để điều chỉnh nó.