Slide 1

Slide 1 text

ActiveRecord::Postgr eSQLAnalyzer gem Λ࡞ͬͨ࿩ !

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

TODO: !

Slide 4

Slide 4 text

⭐ github.com/ma2gedev/ power_assert_ex

Slide 5

Slide 5 text

ActiveRecord::PostgreSQLAnalyzer https://github.com/m3dev/ active_record- postgresql_analyzer

Slide 6

Slide 6 text

͖͔͚ͬ

Slide 7

Slide 7 text

m3 advent calendar

Slide 8

Slide 8 text

SAStruts + S2JDBC ͷࢥ͍ग़ʹ͍ͭͯ ଘ෼ʹޠΔ #m3dev — @seratch http://qiita.com/ seratch@github/items/ 826f1b4a89993d3b0804

Slide 9

Slide 9 text

Sequential Scan ݕ ஌

Slide 10

Slide 10 text

ศརͦ͏ ͪͳΈʹ͜ͷΞΠσΞࣗମ͸ S2JDBC ʹݶఆ͞Ε·ͤΜɻࠓ೥΍ͬͨϓϩδ ΣΫτͰ͸ Scala ͷΞϓϦέʔγϣϯ Ͱ΋ಉ͡Α͏ͳίʔυΛॻ͍ͨͷͰ͢ ͕ɺඇৗʹ༗༻Ͱͨ͠ɻ — @seratch

Slide 11

Slide 11 text

Ruby(RoR)͸ʁ

Slide 12

Slide 12 text

ͳ͚Ε͹࡞Ζ ͏ OSS

Slide 13

Slide 13 text

ActiveRecord::PostgreSQLAnalyzer https://github.com/m3dev/ active_record- postgresql_analyzer

Slide 14

Slide 14 text

Rails ͰγʔέϯγϟϧεΩ ϟϯ͍ͯ͠ΔΫΤϦΛݟ ͚ͭͯḿΓ͍ͨ - PostgreSQL ݶ ఆ http://qiita.com/ma2ge/ items/0df91b0fbd90808f40d5

Slide 15

Slide 15 text

όζͬ ͨʂʁ

Slide 16

Slide 16 text

όζͬͯͳ ͍

Slide 17

Slide 17 text

ͩ͞·͞͠ऑऀ͗ͯ͢ࠔͬͨͷͰ Scala ͰίϯύΠϧ͢Δ͜ͱʹͨ͠࿩ — @seratch http://qiita.com/ seratch@github/items/ 3be26b584f3d74aa1150

Slide 18

Slide 18 text

࢖͍ํ

Slide 19

Slide 19 text

Gemfile gem 'active_record-postgresql_analyzer', group: :development

Slide 20

Slide 20 text

Output logfile if sequential scan is detected ------------ find Seq Scan query ------------ SELECT "todo".* FROM "todo" WHERE "todo"."user_id" = $1 LIMIT 1 QUERY PLAN --------------------------------------------------------------------------------------------- Limit (cost=10000000000.00..10000000001.67 rows=1 width=81) -> Seq Scan on todo (cost=10000000000.00..10000000001.67 rows=1 width=81) Filter: (user_id = 13) (3 rows)

Slide 21

Slide 21 text

࢓૊Έ

Slide 22

Slide 22 text

ActiveSupport::Notifications ActiveRecord::PostgreSQLAnalyzer::LogSubscriber.attach_to :active_record https://github.com/m3dev/ active_record-postgresql_analyzer/ blob/master/lib/active_record/ postgresql_analyzer.rb#L42

Slide 23

Slide 23 text

Explain ActiveRecord::Base.connection.explain(payload[:sql], payload[:binds]) https://github.com/m3dev/ active_record-postgresql_analyzer/ blob/master/lib/active_record/ postgresql_analyzer.rb#L22

Slide 24

Slide 24 text

Detect Sequential Scan SELECT "todo".* FROM "todo" WHERE "todo"."user_id" = $1 LIMIT 1 QUERY PLAN --------------------------------------------------------------------------------------------- Limit (cost=10000000000.00..10000000001.67 rows=1 width=81) -> Seq Scan on todo (cost=10000000000.00..10000000001.67 rows=1 width=81) Filter: (user_id = 13) (3 rows) https://github.com/m3dev/ active_record-postgresql_analyzer/ blob/master/lib/active_record/ postgresql_analyzer.rb#L23

Slide 25

Slide 25 text

index షΓ๨Ε๷ ࢭ

Slide 26

Slide 26 text

ActiveRecord::PostgreSQLAnalyzer https://github.com/m3dev/ active_record- postgresql_analyzer

Slide 27

Slide 27 text

⭐ github.com/ma2gedev/ power_assert_ex

Slide 28

Slide 28 text

end