Skip to content
  • Ryuta Kamizono's avatar
    0908184e
    Use `execute_batch2` rather than `execute_batch` to fix performance regression for fixture loading · 0908184e
    Ryuta Kamizono authored
    d8d6bd5e makes fixture loading to bulk statements by using
    `execute_batch` for sqlite3 adapter. But `execute_batch` is slower and
    it caused the performance regression for fixture loading.
    
    In sqlite3 1.4.0, it have new batch method `execute_batch2`. I've
    confirmed `execute_batch2` is extremely faster than `execute_batch`.
    So I think it is worth to upgrade sqlite3 to 1.4.0 to use that method.
    
    Before:
    
    ```
    % ARCONN=sqlite3 bundle exec ruby -w -Itest test/cases/associations/eager_test.rb -n test_eager_loading_too_may_ids
    Using sqlite3
    Run options: -n test_eager_loading_too_may_ids --seed 35790
    
    # Running:
    
    .
    
    Finished in 202.437406s, 0.0049 runs/s, 0.0049 assertions/s.
    1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
    ARCONN=sqlite3 bundle exec ruby -w -Itest  -n test_eager_loading_too_may_ids  142.57s user 60.83s system 98% cpu 3:27.08 total
    ```
    
    After:
    
    ```
    % ARCONN=sqlite3 bundle exec ruby -w -Itest test/cases/associations/eager_test.rb -n test_eager_loading_too_may_ids
    Using sqlite3
    Run options: -n test_eager_loading_too_may_ids --seed 16649
    
    # Running:
    
    .
    
    Finished in 8.471032s, 0.1180 runs/s, 0.1180 assertions/s.
    1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
    ARCONN=sqlite3 bundle exec ruby -w -Itest  -n test_eager_loading_too_may_ids  10.71s user 1.36s system 95% cpu 12.672 total
    ```
    0908184e
    Use `execute_batch2` rather than `execute_batch` to fix performance regression for fixture loading
    Ryuta Kamizono authored
    d8d6bd5e makes fixture loading to bulk statements by using
    `execute_batch` for sqlite3 adapter. But `execute_batch` is slower and
    it caused the performance regression for fixture loading.
    
    In sqlite3 1.4.0, it have new batch method `execute_batch2`. I've
    confirmed `execute_batch2` is extremely faster than `execute_batch`.
    So I think it is worth to upgrade sqlite3 to 1.4.0 to use that method.
    
    Before:
    
    ```
    % ARCONN=sqlite3 bundle exec ruby -w -Itest test/cases/associations/eager_test.rb -n test_eager_loading_too_may_ids
    Using sqlite3
    Run options: -n test_eager_loading_too_may_ids --seed 35790
    
    # Running:
    
    .
    
    Finished in 202.437406s, 0.0049 runs/s, 0.0049 assertions/s.
    1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
    ARCONN=sqlite3 bundle exec ruby -w -Itest  -n test_eager_loading_too_may_ids  142.57s user 60.83s system 98% cpu 3:27.08 total
    ```
    
    After:
    
    ```
    % ARCONN=sqlite3 bundle exec ruby -w -Itest test/cases/associations/eager_test.rb -n test_eager_loading_too_may_ids
    Using sqlite3
    Run options: -n test_eager_loading_too_may_ids --seed 16649
    
    # Running:
    
    .
    
    Finished in 8.471032s, 0.1180 runs/s, 0.1180 assertions/s.
    1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
    ARCONN=sqlite3 bundle exec ruby -w -Itest  -n test_eager_loading_too_may_ids  10.71s user 1.36s system 95% cpu 12.672 total
    ```
Loading