Possibly excessive transaction count with ActiveRecord
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Bắt đầu với lib/database_cleaner/active_record/transaction.rb quanh dòng 12, sau đó đọc git blame/log cho các commit 1af146fb80fef05acca0d1a322bb6987af645cc0 và database_cleaner#200. Tái hiện số lượng BEGIN/COMMIT trên mỗi test bằng cấu hình RSpec được cung cấp và kiểm tra rằng mọi thay đổi đều giữ nguyên hành vi đã được sửa trong #200, đồng thời loại bỏ phần xử lý transaction không cần thiết.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I am using a standard :transaction DatabaseCleaner block with rspec:
config.around(:each) do |example|
DatabaseCleaner[:active_record, connection: :test].cleaning do
example.run
end
end
When trying to profile the queries in the test suite, I noticed there was a large number of COMMIT statements: one for each test, and equivalent to the ROLLBACK query count. After digging, it seems the strategy runs a blank transaction in the DatabaseCleaner#begin block: https://github.com/DatabaseCleaner/database_cleaner/blob/cda982c9b4a8f3f116ed7e39766eb1447e0197aa/lib/database_cleaner/active_record/transaction.rb#L12
From what I can tell with git's blame/log, this was added in 1af146fb80fef05acca0d1a322bb6987af645cc0 and then modified as a fix for DatabaseCleaner/database_cleaner#200. These seem to indicate that this empty transaction only needs to be run once, perhaps at the start of the suite, or perhaps with a flag indicating it's been run once and doesn't need to run again.
It's clearly not the end of the world, but I am currently on a spec optimisation push and this extra BEGIN/COMMIT per test is having a not-insignificant (but admittedly not major) impact on test time: My metrics indicate it's adding about 15 seconds of time to a suite with 6200ish tests.
Happy to help and create a pull request if there's consensus that I haven't misunderstood the purpose of that statement!
- Ngôn ngữ chính
- Ruby
- Star
- 76
- Fork
- 76
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của DatabaseCleaner/database_cleaner-active_record
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 30/100
DatabaseCleaner/database_cleaner-active_record#128 · 1 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
DatabaseCleaner/database_cleaner-active_record#127 · 3 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
-
Parallelized truncates Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
Tất cả issue của DatabaseCleaner/database_cleaner-active_record
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
hanami/hanami-cli#449 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
resque/resque-scheduler#826 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100