2011-02-16 26 views
5

ứng dụng asp.net của tôi sử dụng một số trình tự để tạo các bảng khóa chính. Quản trị viên Db đã thiết lập kích thước bộ nhớ cache là 20. Bây giờ ứng dụng đang được thử nghiệm và một vài bản ghi được thêm vào hàng ngày (nói 4 cho mỗi phiên kiểm tra người dùng). Tôi đã tìm thấy các bản ghi phiên kiểm tra mới luôn sử dụng các phần bộ nhớ cache mới như nếu số ngày lưu trong bộ nhớ cache đã hết hạn, mất mười phần mười khóa mỗi ngày. Tôi muốn hiểu nếu đó là do một số sai lầm tôi có thể đã thực hiện trong ứng dụng của tôi (xử lý các tableadapters hoặc bất cứ điều gì) hoặc nếu đó là hành vi thông thường. Có những phương pháp hay nhất về lập trình để đưa vào tài khoản khi xử lý các chuỗi oracle?Trình tự bộ nhớ cache của Oracle lão hóa quá thường xuyên

Vì ứng dụng sẽ không phải chịu tải nặng công việc (nói 20-40 bản ghi mới vào ban ngày), tôi đang báo nếu có thể đặt kích thước bộ nhớ cache nhỏ hơn hoặc không có gì cả. Việc thay đổi kích thước bộ nhớ cache của chuỗi có nghĩa là đặt lại chỉ mục hiện tại không?

cảm ơn trước cho bất kỳ gợi ý nào

+2

Vì vậy, id của bạn có khoảng trống. Vậy cái gì? Tôi không thấy vấn đề. –

+0

trong khi khoảng cách không phải là một vấn đề, lãng phí 95% giá trị chỉ là: lãng phí –

+0

để được rõ ràng: khoảng trống không lo lắng cho tôi nhiều, tôi biết trình tự có thể có khoảng trống. –

Trả lời

7

Câu trả lời từ Justin Cave trong chủ đề này có thể là thú vị dành cho bạn:

http://forums.oracle.com/forums/thread.jspa?threadID=640623

Tóm lại: nếu chuỗi không được truy cập thường xuyên đủ nhưng bạn phải aa rất nhiều "giao thông" trong bộ nhớ cache của thư viện, sau đó trình tự có thể bị loại bỏ khỏi bộ nhớ cache. Trong trường hợp đó, các giá trị được phân bổ trước bị mất.

Nếu điều đó xảy ra rất thường xuyên với bạn, có vẻ như trình tự của bạn không được sử dụng thường xuyên.

Tôi đoán rằng giảm kích thước bộ nhớ cache (hoặc hoàn toàn vô hiệu hóa nó) sẽ không có tác động đáng chú ý về hiệu suất trong trường hợp của bạn (còn khi chụp tuyên bố của bạn của 20-40 kỷ lục mới một ngày vào tài khoản)

+0

Vì đây là môi trường thử nghiệm, tôi cũng nghi ngờ rằng cơ sở dữ liệu đã được khởi động lại mỗi tối. Giả sử đó không phải là trường hợp trong sản xuất, điều này có thể là một vấn đề môi trường. –

+0

đúng, ứng dụng về bản chất là một hình thức lớn được chia thành các phần ajax. Các thử nghiệm tôi đã thực hiện ngày hôm nay cho thấy nó chuyển đổi giữa hai trình tự lưu trữ. Ngoài việc bị lừa dối và cố gắng để cứu số lượng, nỗi sợ của tôi là việc sử dụng các chuỗi của tôi có một số lỗi lập trình. –

2

Oracle Sequences không phải là khoảng trống. Giảm kích thước Cache sẽ giảm khoảng trống ... nhưng bạn vẫn sẽ có khoảng trống. Trình tự không được liên kết với bảng bởi cơ sở dữ liệu, nhưng bằng mã của bạn (thông qua các bước tiếp theo trên chèn thông qua trigger/sql/pkg api) - trên ghi chú đó bạn có thể sử dụng cùng một trình tự trên nhiều bảng (nó không phải là như danh tính của máy chủ sql trong đó nó được liên kết với cột/bảng)

do đó việc thay đổi trình tự sẽ không ảnh hưởng đến các chỉ mục.

Bạn sẽ chỉ cần phải chắc chắn nếu bạn thả các trình tự và khởi động lại nó, bạn gieo hạt 'đến 1 giá trị hiện tại (ví dụ như tạo ra chuỗi seqer bắt đầu với 125 nocache;)

, nhưng

Nếu ứng dụng của bạn yêu cầu số không có khoảng trống, thì bạn không thể sử dụng chuỗi Oracle. Bạn phải hoạt động serialize trong cơ sở dữ liệu sử dụng mã được phát triển của riêng bạn.

nhưng được cảnh báo trước, bạn có thể tăng IO đĩa và khóa giao dịch có thể có nếu bạn chọn không sử dụng chuỗi.

Các máy phát điện chuỗi rất hữu ích trong môi trường đa người dùng để tạo con số duy nhất mà không có sự cần thiết của việc đĩa I/O hoặc khóa giao dịch.

để nhắc lại nhận xét của a_horse_with_no_name, vấn đề với khoảng trống trong id là gì?


Sửa cũng có một cái nhìn tại các logic bộ nhớ đệm, bạn nên sử dụng nằm ở đây: http://download.oracle.com/docs/cd/E11882_01/server.112/e17120/views002.htm#i1007824


0

Khi mọi người đề cập: Những khoảng trống không phải là một vấn đề, vì vậy nếu bạn là yêu cầu không có khoảng trống nào bạn đang làm sai. (Nhưng tôi không nghĩ rằng đây là những gì bạn muốn).

Giảm bộ nhớ cache sẽ giảm số lượng và giảm hiệu suất của chuỗi, đặc biệt là với quyền truy cập đồng thời vào đó. (đó không phải là vấn đề trong trường hợp sử dụng của bạn).

Thay đổi trình tự bằng cách sử dụng câu lệnh trình tự thay đổi (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_2011.htm) không nên đặt lại giá trị hiện tại/tiếp theo của chuỗi .

+2

Bộ nhớ đệm trình tự nằm trong SGA ("bộ đệm trình tự [được lưu trữ] trong Khu vực toàn cầu hệ thống (SGA).") Một thử nghiệm nhanh chóng về việc tạo phiên mới cho biết chúng là đồng thời (có nghĩa là chúng tăng như mong đợi ở cả hai phiên sử dụng cùng một bộ nhớ cache). cho tôi biết nếu bạn có kết quả khác nhau nếu bạn kiểm tra điều đó, nhưng có vẻ như bộ nhớ cache chỉ hết thời gian do không hoạt động để bắt đầu một số mới như các vấn đề kết nối tổng hợp trái ngược. – Harrison

+0

Đọc liên kết bạn cung cấp, vì vậy tôi đoán bạn đúng ... tự hỏi tôi đã chọn trí tuệ giả ở đâu: -/ –

1

Nếu bạn đang sử dụng trình tự cho PK và không thực thi một số logic ứng dụng thì bạn không nên lo lắng về những khoảng trống. Tuy nhiên, nếu có một số logic ứng dụng liên kết với các giá trị tuần tự tuần tự, bạn sẽ có lỗ nếu bạn sử dụng bộ đệm tuần tự và không có hệ thống bận. Giá trị bộ nhớ cache của trình tự có thể ở độ tuổi ngoài bộ nhớ cache của thư viện.

Bạn nói rằng hệ thống của bạn không phải là rất bận rộn, trong trường hợp này thay đổi trình tự của bạn để không có bộ nhớ cache. Bạn đang ở trong một vị trí của việc thực hiện một hit hiệu suất không đáng kể để sửa chữa một vấn đề logic để bạn có thể là tốt.

Các vấn đề liên quan