Truy vấn chạy dài trên bản sao chỉ đọc có thời gian trên Chính


8

Tôi đã có một thiết lập AG 4 nút như sau:

Cấu hình phần cứng VM của tất cả các nút:

  • Phiên bản doanh nghiệp Microsoft SQL Server 2017 (RTM-CU14) (KB4484710)
  • 16 vCPU
  • RAM 356 GB (câu chuyện dài đến thế này ...)
  • mức độ song song tối đa: 1 (theo yêu cầu của nhà cung cấp ứng dụng)
  • ngưỡng chi phí cho song song: 50
  • bộ nhớ máy chủ tối đa (MB): 338944 (331 GB)

Cấu hình AG:

  • Nút 1: Cam kết chính hoặc đồng bộ Thứ cấp không thể đọc được, được định cấu hình cho chuyển đổi dự phòng tự động
  • Nút 2: Cam kết chính hoặc đồng bộ Thứ hai không thể đọc được, được định cấu hình cho chuyển đổi dự phòng tự động
  • Nút 3: Bộ thứ cấp có thể đọc được với Cam kết không đồng bộ, được định cấu hình cho chuyển đổi dự phòng thủ công
  • Nút 4: Bộ thứ cấp có thể đọc được với Cam kết không đồng bộ, được định cấu hình cho chuyển đổi dự phòng thủ công

Truy vấn trong câu hỏi:

Không có gì điên rồ về truy vấn này, nó cung cấp một bản tóm tắt các mục công việc nổi bật trong các hàng đợi khác nhau trong ứng dụng. Bạn có thể xem mã từ một trong các liên kết kế hoạch thực hiện bên dưới.

Hành vi thực thi trên nút chính:

Khi được thực thi trên nút Chính, thời gian thực hiện thường ở khoảng 1 giây. Dưới đây là kế hoạch thực hiện và bên dưới là các số liệu thống kê được thu thập từ THỐNG KÊ IO và THỐNG KÊ THỜI GIAN từ nút chính:

(347 rows affected)
Table 'Worktable'. Scan count 647, logical reads 2491, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'workitemlc'. Scan count 300, logical reads 7125, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'schedulertask'. Scan count 1, logical reads 29, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'wfschedulertask'. Scan count 1, logical reads 9, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'schedulerservice'. Scan count 1, logical reads 12, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'schedulerworkerpool'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'itemlc'. Scan count 1, logical reads 26372, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row affected)

 SQL Server Execution Times:
   CPU time = 500 ms,  elapsed time = 656 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

Hành vi thực thi trên nút phụ chỉ đọc:

Khi thực hiện trên Nút phụ chỉ đọc (tức là Nút 3 hoặc Nút 4), truy vấn này sử dụng cùng một kế hoạch thực hiện (đây là một liên kết kế hoạch khác) và gần như thống kê thực hiện được hiển thị (ví dụ: có thể có thêm một vài trang quét vì những kết quả này luôn thay đổi), nhưng ngoại trừ thời gian của CPU, chúng trông rất giống nhau. Dưới đây là các số liệu thống kê được thu thập từ THỐNG KÊ IO và THỐNG KÊ THỜI GIAN từ nút phụ chỉ đọc:

(347 rows affected)
Table 'Worktable'. Scan count 647, logical reads 2491, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'workitemlc'. Scan count 300, logical reads 7125, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'schedulertask'. Scan count 1, logical reads 29, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'wfschedulertask'. Scan count 1, logical reads 9, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'schedulerservice'. Scan count 1, logical reads 12, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'schedulerworkerpool'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'itemlc'. Scan count 1, logical reads 26372, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row affected)

 SQL Server Execution Times:
   CPU time = 55719 ms,  elapsed time = 56335 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

Những chi tiết khác:

Tôi cũng đã chạy cả hai sp_WhoIsActivevà kịch bản của Paul RandalWaitingTasks.sql trên phần thứ cấp trong khi truy vấn này đang được thực thi, nhưng tôi không thấy bất kỳ sự chờ đợi nào xảy ra, điều này thực sự gây thất vọng:

nhập mô tả hình ảnh ở đây

Đây cũng không phải là một trường hợp có độ trễ AG vì trạng thái Đồng bộ hóa thực sự khá tốt:

--https://sqlperformance.com/2015/08/monitoring/availability-group-replica-sync

SELECT 
       ar.replica_server_name, 
       adc.database_name, 
       ag.name AS ag_name, 
       drs.is_local, 
       drs.synchronization_state_desc, 
       drs.synchronization_health_desc, 
       --drs.last_hardened_lsn, 
       --drs.last_hardened_time, 
       drs.last_redone_time, 
       drs.redo_queue_size, 
       drs.redo_rate, 
       (drs.redo_queue_size / drs.redo_rate) / 60.0 AS est_redo_completion_time_min,
       drs.last_commit_lsn, 
       drs.last_commit_time
FROM sys.dm_hadr_database_replica_states AS drs
INNER JOIN sys.availability_databases_cluster AS adc 
       ON drs.group_id = adc.group_id AND 
       drs.group_database_id = adc.group_database_id
INNER JOIN sys.availability_groups AS ag
       ON ag.group_id = drs.group_id
INNER JOIN sys.availability_replicas AS ar 
       ON drs.group_id = ar.group_id AND 
       drs.replica_id = ar.replica_id
ORDER BY 
       ag.name, 
       ar.replica_server_name, 
       adc.database_name;

nhập mô tả hình ảnh ở đây

Truy vấn này dường như là người phạm tội tồi tệ nhất. Các truy vấn khác cũng mất thời gian thứ hai giây trên Nút chính có thể mất 1 - 5 giây trên nút Phụ và trong khi hành vi không nghiêm trọng, thì nó có vẻ gây ra sự cố.

Cuối cùng, tôi cũng đã xem xét các máy chủ và kiểm tra các quy trình bên ngoài như Quét A / V, các công việc bên ngoài tạo ra I / O bất ngờ, v.v. và đã ra về tay không. Tôi không nghĩ rằng điều này được gây ra bởi bất cứ điều gì ngoài quy trình SQL Server.

Câu hỏi:

Chỉ là buổi trưa tôi ở đó và đã là một ngày dài, vì vậy tôi nghi ngờ tôi đang thiếu một cái gì đó rõ ràng ở đây. Hoặc là hoặc chúng tôi đã có một cái gì đó được định cấu hình sai, điều này là có thể vì chúng tôi đã có một số cuộc gọi đến Nhà cung cấp và MS liên quan đến môi trường này.

Đối với tất cả các cuộc điều tra của tôi, tôi dường như không thể tìm thấy điều gì gây ra sự khác biệt về hiệu suất này. Tôi hy vọng sẽ thấy một số loại chờ đợi xảy ra trên các nút thứ cấp, nhưng không có gì. Làm thế nào tôi có thể khắc phục sự cố này để xác định nguyên nhân gốc? Có ai nhìn thấy hành vi này trước đây và tìm cách giải quyết nó?

CẬP NHẬT # 1 Sau khi hoán đổi trạng thái của nút thứ ba (một trong những bản sao Chỉ đọc) thành không thể đọc được và sau đó trở lại để có thể đọc được dưới dạng thử nghiệm, bản sao đó vẫn đang được giữ bởi một giao dịch mở, với bất kỳ truy vấn khách nào hiển thị HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONINGchờ đợi.

Chạy một DBCC OPENTRANlệnh mang lại kết quả như sau:

Oldest active transaction:
    SPID (server process ID): 420s
    UID (user ID) : -1
    Name          : QDS nested transaction
    LSN           : (941189:33148:8)
    Start time    : May  7 2019 12:54:06:753PM
    SID           : 0x0
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Khi tra cứu SPID này sp_who2, nó hiển thị nó như là một BACKGROUNDquá trình QUERY STORE BACKđược liệt kê dưới dạng lệnh.

Mặc dù chúng tôi thể thực hiện sao lưu TLog, tôi nghi ngờ chúng tôi đang chạy vào chức năng tương tự của lỗi đã được giải quyết này , vì vậy tôi có kế hoạch mở một vé với MS về vấn đề đặc biệt này ngày hôm nay.

Tùy thuộc vào kết quả của vé đó, tôi sẽ cố gắng ghi lại dấu vết ngăn xếp cuộc gọi theo đề xuất của Joe và xem chúng tôi sẽ đi đâu.

Cập nhật cuối cùng (Vấn đề tự giải quyết)

Sau khi làm lu mờ mốc 52 giờ của giao dịch Cửa hàng Truy vấn đang mở (như được xác định ở trên), AG đã quyết định tự động chuyển đổi dự phòng. Trước khi điều này xảy ra, tôi đã thực hiện một số số liệu bổ sung. Mỗi liên kết này , được cung cấp bởi Sean, cơ sở dữ liệu trong câu hỏi đã có một phiên bản lưu trữ rất lớn dành riêng cho cơ sở dữ liệu này, đặc biệt là tại một thời điểm tôi đã ghi 1651360 trang trong reserved_page_countlĩnh vực và 13210880 cho reserved_space_kbgiá trị.

Theo ERRORLOG, việc chuyển đổi dự phòng xảy ra sau 5 phút khắc phục các lỗi cứng giao dịch liên quan đến QDS base transactionQDS nested transactiongiao dịch.

Việc chuyển đổi dự phòng đã gây ra sự cố mất điện khoảng 10 phút trong trường hợp của tôi. Cơ sở dữ liệu có kích thước ~ 6TB và hoạt động rất tốt, vì vậy theo tôi thì thực sự khá tốt. Mặc dù nút chính mới trực tuyến trong thời gian này, không có truy vấn khách nào có thể hoàn thành vì tất cả chúng đều đang QDS_LOADDBchờ loại chờ.

Sau khi chuyển đổi dự phòng, số lượng cửa hàng phiên bản giảm xuống còn 176 cho reserved_page_countvà 1408 cho reserved_space_kb. Các truy vấn đối với các Bản sao chỉ đọc phụ cũng bắt đầu thực hiện nhanh như thể chúng được chạy từ bản chính, vì vậy có vẻ như hành vi biến mất hoàn toàn, do hậu quả của việc chuyển đổi dự phòng.


Nếu bạn không thể thay đổi thời lượng của các giao dịch mở trên chính hoặc kiểm soát các truy vấn nhấn mạnh vào thứ cấp, thì việc chỉ ra khối lượng công việc cho chính sẽ làm giảm bớt vấn đề chạy dài - mặc dù có thể gặp các vấn đề liên quan đến truy vấn điển hình khác. Tôi sẽ không nói rằng việc đặt các bản sao là không thể đọc được để làm sáng tỏ mọi thứ là bình thường, nhưng đó là một kỹ thuật khắc phục sự cố tốt. Tất cả phụ thuộc vào việc bạn có thể / muốn khắc phục nguyên nhân cơ bản hay chỉ là triệu chứng khi mọi thứ trở nên tồi tệ.
Sean Gallardy

1
Hey, John - tuyệt vời theo dõi với câu hỏi này. Chỉ muốn đề cập, về QDS_LOADDB- nếu bạn muốn tránh điều đó trong tương lai, nhưng vẫn tiếp tục Truy vấn Cửa hàng, bạn có thể sử dụng các cờ theo dõi được đề xuất bởi Microsoft. Cụ thể, 7752 sẽ cho phép các truy vấn thực thi trước khi Cửa hàng truy vấn đã khởi tạo (vì vậy bạn có thể bỏ lỡ một số truy vấn, nhưng cơ sở dữ liệu của bạn sẽ hoạt động).
Josh Darnell

John - bất kỳ cơ hội nào khối lượng công việc của bạn không được tham số hóa, tham số kém, hoặc đặc biệt cao? Tôi đã thấy một vài vấn đề với QDS liên quan đến khối lượng công việc loại ad hoc
AMtwo

@AMtwo Có, phần lớn các truy vấn truy cập cơ sở dữ liệu được tạo tại máy khách và không được tham số hóa (tức là truy vấn đặc biệt).
John Eisbrener

@JoshDarnell Trace cờ 7752trông đặc biệt hữu ích. Cảm ơn vì tiền hỗ trợ!
John Eisbrener

Câu trả lời:


9

Câu trả lời này ngoài câu trả lời của Joe vì tôi không thể chắc chắn 100% đó là cửa hàng phiên bản, tuy nhiên cho đến nay vẫn có đủ bằng chứng cho thấy đó là một phần của vấn đề.

Khi một bản sao thứ cấp được đánh dấu là có thể đọc được, trạng thái ổn định tốt cho thông tin phiên bản cần phải đạt được trước tiên để có một điểm khởi đầu đã biết và tốt cho tất cả các hoạt động đọc trên thứ cấp. Khi điều này đang chờ để chuyển đổi và vẫn còn các giao dịch mở trên chính, điều này sẽ biểu hiện HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONINGvà cũng là một dấu hiệu tốt cho thấy rằng giao dịch chính trải qua khá nhiều khúc mắc dữ liệu (hoặc ít nhất là ai đó có giao dịch mở thực sự dài cũng không tốt). Các giao dịch được mở càng lâu và càng có nhiều thay đổi dữ liệu, phiên bản sẽ xảy ra càng nhiều.

Bản sao thứ cấp đạt được trạng thái có thể đọc được bằng cách sử dụng cách ly ảnh chụp nhanh dưới nắp cho phiên, ngay cả khi bạn kiểm tra thông tin phiên của mình, bạn sẽ thấy nó hiển thị ở mức đọc mặc định đã cam kết. Vì cách ly snapshot là lạc quan và sử dụng kho phiên bản, nên tất cả các thay đổi sẽ cần phải được phiên bản. Điều này trở nên trầm trọng hơn khi có nhiều truy vấn đang chạy (và có khả năng chạy lâu) trên mạng thứ cấp trong khi tốc độ cao của dữ liệu ở mức chính. Nói chung, điều này chỉ xuất hiện trong một vài bảng cho một hệ thống OLTP nhưng nó hoàn toàn phụ thuộc vào ứng dụng và khối lượng công việc.

Bản thân cửa hàng phiên bản được đo theo các thế hệ và khi một truy vấn được chạy yêu cầu sử dụng kho phiên bản, con trỏ bản ghi phiên bản được sử dụng để trỏ đến chuỗi TempDB của hàng đó. Tôi nói chuỗi, bởi vì đó là danh sách các phiên bản cho hàng đó và toàn bộ chuỗi phải được chuyển tuần tự để tìm phiên bản phù hợp dựa trên dấu thời gian bắt đầu của giao dịch để kết quả phù hợp với dữ liệu tại thời điểm đó.

Nếu cửa hàng phiên bản có nhiều thế hệ cho các hàng này do các giao dịch chạy dài trên các bản sao chính và phụ, điều này sẽ gây ra thời gian dài hơn trung bình cho các truy vấn để chạy và thường ở dạng CPU cao hơn trong khi tất cả các mục khác dường như giữ nguyên - chẳng hạn như kế hoạch thực hiện, số liệu thống kê, hàng được trả về, v.v ... Việc đi bộ của chuỗi gần như là một hoạt động hoàn toàn cpu, vì vậy khi chuỗi trở nên rất dài và số lượng hàng được trả về rất cao, bạn sẽ nhận được (không phải tuyến tính, nhưng có thể đóng) tăng thời gian cho truy vấn.

Điều duy nhất có thể được thực hiện là giới hạn độ dài của các giao dịch trên cả chính và phụ để đảm bảo cửa hàng phiên bản không trở nên quá lớn trong TempDB trong khi có nhiều thế hệ. Nỗ lực dọn dẹp cửa hàng phiên bản xảy ra khoảng một phút một lần, tuy nhiên việc dọn dẹp yêu cầu tất cả các phiên bản từ cùng một thế hệ không còn cần thiết trước khi có thể xóa và tất cả các phiên bản trong tương lai không thể được làm sạch cho đến khi không còn phiên bản cũ nhất. Do đó, một truy vấn chạy dài có thể gây ra sự mất khả năng dọn dẹp hiệu quả nhiều thế hệ không sử dụng.

Chuyển đổi bản sao trong và ngoài chế độ có thể đọc cũng sẽ xóa cửa hàng phiên bản vì nó không còn có thể đọc được.

Có những mục khác cũng có thể đang diễn ra, nhưng điều này có vẻ hợp lý nhất với dữ liệu hiện tại và cách thức bản sao đang phản ứng.

DMV phiên bản TempDB (không bị nhầm lẫn với phiên bản ADR).


Khi chạy một truy vấn sys.dm_tran_version_store_space_usage, nó trả về 1651360 dưới dạng reserved_page_count và 13210880 cho giá trị reserved_space_kb của tôi cho cơ sở dữ liệu được đề cập. Chỉ dẫn có vẻ tốt bạn đã nhận ra vấn đề này mặc dù. Cảm ơn một lần nữa cho lời giải thích chi tiết!
John Eisbrener

1
Tôi chắc chắn khoảng 103% bạn đã gọi đúng vấn đề. Tôi đã cập nhật câu hỏi với một số cập nhật, nhưng cảm ơn rất nhiều vì những hiểu biết của bạn!
John Eisbrener

8

Tuyên bố miễn trừ trách nhiệm: Tôi không biết gì về các nhóm khả dụng, nhưng tôi biết một chút về các truy vấn khắc phục sự cố có vẻ như sử dụng nhiều CPU hơn.

Bạn có một vấn đề về CPU là bạn đang sử dụng quá nhiều. Một điều quan trọng để nói về sự chờ đợi là hầu hết tất cả chúng đều không bận CPU. Khi một công nhân bước vào trạng thái chờ, nó đã sinh ra và không còn chạy trên bộ lập lịch trong SQLOS. Vì vậy, nếu bạn có truy vấn MAXDOP 1 với các thống kê chạy sau:

Thời gian CPU = 55719 ms, thời gian trôi qua = 56335 ms.

Bạn đạt mức sử dụng CPU gần như 99% cho truy vấn. Tại sao nên có số liệu thống kê chờ có ý nghĩa cho truy vấn đó? Bạn có thể thấy một số nếu bạn có một số CPU chờ đợi bận rộn như chờ đợi bên ngoài hoặc chờ đợi, nhưng điều đó cũng không được đảm bảo. Điểm mấu chốt là số liệu thống kê chờ đợi có thể không hữu ích ở đây.

Có một số điều cần kiểm tra theo thứ tự thô (thứ tự phụ thuộc vào những gì bạn biết về môi trường):

  • Liệu máy chủ thứ cấp có bất kỳ sự giám sát đắt tiền nào đang diễn ra như các sự kiện mở rộng, dấu vết hoặc hồ sơ không?
  • Phần cứng của máy chủ thứ cấp có phù hợp với sơ cấp không?
  • Có bất kỳ vấn đề cấu hình hoặc phần mềm với máy chủ thứ cấp?
  • Bất kỳ chờ đợi hoặc chốt đáng kể? Có thể không áp dụng được cho truy vấn của bạn nhưng vẫn có thể cung cấp manh mối.
  • Bất kỳ spinlocks đáng kể?
  • Có DMV nào khác hoặc những thứ mà bạn có thể kiểm tra trong SQL Server có thể đưa ra manh mối không? Bạn đã đề cập rằng Nhóm sẵn có có thể là một phần quan trọng của vấn đề.
  • Dấu vết ETW cho bạn biết điều gì?
  • Bạn có loại thỏa thuận hỗ trợ nào?

Hầu hết các nội dung trên được đề cập tốt trên nhiều bài đăng và tài liệu blog khác nhau, nhưng tôi sẽ mở rộng theo dõi ETW. Nếu bạn muốn biết lý do tại sao SQL Server sử dụng rất nhiều CPU cho một truy vấn cụ thể và bạn có quyền truy cập vào máy chủ, bạn luôn có thể theo dõi ETW để xem các cuộc gọi và xem có bao nhiêu cuộc gọi khác nhau của CPU. Nói cách khác, hệ điều hành máy chủ rất sẵn lòng cho bạn biết CPU đang được sử dụng để làm gì nếu bạn biết cách hỏi. Các phương pháp phổ biến để thực hiện theo dõi ETW bao gồm Windows Performance RecorderPerfView .

Ý nghĩa của những kết quả đó đòi hỏi kiến ​​thức nội bộ sâu sắc và thật dễ dàng để đi đến một kết luận sai. Trong nhiều trường hợp, tốt nhất là thu thập dữ liệu thô và yêu cầu các chuyên gia xem xét nó. Khi thực hiện theo dõi bạn muốn hoạt động càng ít càng tốt trong SQL Server. Dưới đây là một vài câu trả lời được đăng ở đây sử dụng theo dõi ETW để đưa ra kết luận về SQL Server:

Tôi nghi ngờ rằng trong trường hợp của bạn, nếu bạn có thể thu thập các cuộc gọi trong khi truy vấn 45 giây, bạn sẽ nhận được một số manh mối rất hữu ích về bản chất của vấn đề.


5

Khi vấn đề tự giải quyết, tôi còn lại để suy đoán nguyên nhân của nó (vần không phải cố ý). Dựa trên bài đăng của Sean và thực tế là một giao dịch Cửa hàng Truy vấn mở dường như là nguyên nhân gốc rễ đối với quy mô cửa hàng phiên bản tăng của tôi (ví dụ: nguyên nhân của sự HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONINGchờ đợi), tôi chỉ có thể giả sử Cửa hàng Truy vấn có một phần trong hành vi đó là trình bày. Cơ sở dữ liệu này lớn hơn (~ 6TB), khá hoạt động và phần lớn các truy vấn đánh vào nó được tạo tại máy khách và không được tham số hóa (ví dụ: truy vấn đặc biệt), vì vậy tôi không tin rằng Cửa hàng truy vấn tự cung cấp rất nhiều sử dụng trong kịch bản này. Do đó, chúng tôi sẽ vô hiệu hóa Cửa hàng truy vấn trong môi trường này trong cửa sổ bảo trì trong tương lai, sau đó tôi nghi ngờ chúng tôi sẽ không gặp lại hành vi này.

Chúng tôi đã mở một vé với Microsoft, nhưng thời gian không có lợi cho chúng tôi vì vấn đề đã được giải quyết trước khi chúng tôi có thể thực hiện bất kỳ phân tích chi tiết nào thông qua dấu vết PSSDIAG hoặc tương tự. Tôi hy vọng họ sẽ có thể thực hiện một số thử nghiệm cục bộ và sao chép vấn đề này trong trường hợp đây là lỗi chúng tôi gặp phải. Nếu bất kỳ cập nhật nào khác về độ phân giải lâu dài hơn được xác định, tôi chắc chắn cũng sẽ cập nhật câu trả lời này.

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.