$30 off During Our Annual Pro Sale. View Details »

ハマったところ 表参道.rb #44 / into a problem

ハマったところ 表参道.rb #44 / into a problem

Railsアプリ運用時にハマったときの体験です

Keiji Matsuzaki

March 07, 2019
Tweet

More Decks by Keiji Matsuzaki

Other Decks in Technology

Transcript

  1. ϋϚͬͨͱ͜Ζ
    දࢀಓ.rb #44 2019/3/7

    View Slide

  2. ࣗݾ঺հ
    • Piece of Cake, Inc.

    • দ࡚ ܒ࣏ (·͖ͭ͟ ͚͍͡)

    • αʔόαΠυ݉ΠϯϑϥΤϯδχΞ

    • 2019೥1݄͔Β

    View Slide

  3. Ruby΍Railsͷਂ෵͸
    ೷͖·ͤΜm(_ _)m

    View Slide

  4. ϋϚͬͨࣄྫͷ͝঺հ

    View Slide

  5. uniq

    View Slide

  6. uniq
    • ͖͔͚ͬRails 4.2 -> 5.1΁ͷΞοϓάϨʔυ͕࠷ॳͷ࢓ࣄ

    • deprecated 5.0 -> 5.1ΑΓ

    • distinctʹॻ͖׵͑Δඞཁ͕͋Δ

    • uniqΛ͋Δఔ౓ݕࡧ͍͕ͯͨ͠ɺͱ͋ΔՕॴͰॻ͖׵͑
    ࿙Ε͕͋ͬͨ

    View Slide

  7. uniq
    • ActiveRecord::RelationʹͯuniqΛ࢖͏ͱSELECT
    DISTINCT… ͱ DISTINCTจʹม͑ͯ͘ΕΔػೳ

    • Rails 5.1͔ΒɺActiveRecord::Relation͸EnumerableΛ
    includeͯ͠ରԠ͢ΔΑ͏ʹͳͬͨͷͰɺArrayΛฦ͢

    View Slide

  8. uniq
    • ى͖ͨ໰୊ -> SELECT id FROM… ʹͯऔಘͨ͠IDΛݩʹ
    ϨίʔυΛݕࡧ͢ΔΫΤϦ͕͋ͬͨ

    • uniqͰɺDISTINCT͕ޮ͍ͨͱ͖͸ɺidͷ਺͕ߜΓࠐ·Εͯ
    ͍ͨ

    View Slide

  9. uniq
    • طଘͷΫΤϦ͸n✕n✕n…(௚ੵ)ɺDISTINCT͕༗ޮʹͳΒͳ
    ͍ͱऔಘ͢ΔϨίʔυ਺͕૿͑ΔΑ͏ʹͳ͍ͬͯͨ

    • EXPLAINͰ࣮ߦͯ͠ɺΫΤϦύϑΥʔϚϯε݁ՌΛݟͯ
    ͋ͱͰڍಈΛ֬ೝͰ͖ͨ

    View Slide

  10. uniq
    • Rails 5.1͔Βɺuniqͦͷ΋ͷͷϝιου͸׆༻Ͱ͖Δͷͩ
    ͕ɺArrayͱͯ͠ฦͬͯ͘Δ

    • Rails 5.0 -> 5.1ΞοϓάϨʔυ࣌ʹ͸Ϩίʔυ਺ͷগͳ͍
    ؀ڥͰಈ࡞֬ೝΛ͢ΔͨΊɺಈ࡞ʹؔͯ͠໰୊͸ΈΒΕͣ

    View Slide

  11. uniq
    • Production deployޙɺҰ෦Controller#ActionͷϨεϙϯε
    λΠϜ͕େ͖͘ͳΔ

    • unicornͷϓϩηε͕൓Ԡ͠ͳ͘ͳΔ

    • ଞͷunicornϓϩηε͕ଞͷϦΫΤετΛॲཧ͠Α͏ͱ͠
    ͯɺಉ͡Controller#ActionͷॲཧΛ࣮ߦͯ͠͠·͏

    View Slide

  12. uniq
    • ໰୊ͱͳΔController#ActionΛ௥͍ͬͯ͘ͱɺuniqͱॻ͔
    Ε͍ͯͨɻ

    • uniq͔Βdistinctʹஔ͖׵͑Δͱ໰୊͕ࢭΜͩ

    View Slide

  13. deprecatedͱܯࠂ͞Εͨޙ΋
    Ҿ͖ଓ͖࢖͑Δϝιουʹ͸
    ஫ҙ͠Α͏

    View Slide

  14. Rails Update࣌ʹ
    Upgrade GuideΛݟΑ͏

    View Slide

  15. ଞ (աڈͷܦݧ)

    View Slide

  16. ଞ (աڈͷܦݧ)
    • INDEXΛࢥͬͨΑ͏ʹ࢖ͬͯ͘Ε͍ͯͳ͍͜ͱ͕Θ͔ͬͨ
    ͷͰɺFORCE INDEXΛ࢖͏Α͏ʹվળ͢Δ

    • SELECT … FOR UPDATE Λൃߦதɺ͏͔ͬΓtransaction
    block಺ʹ ଞαʔϏε ΁ͷAPIΞΫηεΛߦ͏ॲཧΛೖΕͯ
    ͠·͏

    • ଞαʔϏεͷϦΫΤετॲཧʹࣦഊ͠ߦLOCKΛѲͬͨ·
    ·ʹͳΓঃʑʹϦΫΤετʹ٧·͍ͬͯ͘ͳͲ

    View Slide

  17. ऴΘΓ

    View Slide

  18. ࢀߟ
    • ActiveRecord::Relation distinct method (Rails 4.2)

    • https://github.com/rails/rails/blob/v4.2.11/activerecord/
    lib/active_record/relation/query_methods.rb#L776

    • ActiveRecord::Relation (Rails 5.1) -> include Enumerable

    • https://github.com/rails/rails/blob/v5.1.6.1/activerecord/
    lib/active_record/relation.rb

    View Slide

  19. ࢀߟ
    • ΠϯσοΫεώϯτͷߏจ (FORCE INDEX)

    • https://dev.mysql.com/doc/refman/5.6/ja/index-hints.html

    • ϩοΫಡΈऔΓ (SELECT … FOR UPDATE)

    • https://dev.mysql.com/doc/refman/5.6/ja/innodb-locking-
    reads.html

    View Slide

  20. ࢀߟ
    • Rails Upgrade Guide (೔ຊޠ൛)

    • https://railsguides.jp/upgrading_ruby_on_rails.html

    View Slide