From: Jeremy Kemper Date: 2007-03-08T18:36:01+09:00 Subject: Re: High ActiveRecord CPU Utilization ------=_Part_214406_10083343.1173346557246 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 3/7/07, Jeremy Kemper wrote: > I wrapped this up in a simple script that anyone with MySQL or SQLite > and the AR gem can run. It benchmarks AR create vs using the db > connection directly. See attached. > > Excerpted results on a new MacBook Pro: > user system total real > raw quoted 0.460000 0.000000 0.460000 ( 0.480184) > create 2.760000 0.080000 2.840000 ( 3.225227) > > (Nearly 7 times slower.) I haven't tried profiling the methods yet. An updated script that actually works with MySQL is attached ;-) Transactions make a huge difference with MySQL compared to the negligible impact with in-memory SQLite. user system total real raw quoted 0.480000 0.120000 0.600000 ( 2.530020) raw quoted txn 0.230000 0.060000 0.290000 ( 0.546332) create 3.170000 0.320000 3.490000 ( 5.685493) create txn 1.990000 0.090000 2.080000 ( 2.392676) (2.2x slower without a transaction; 4.4x slower with) jeremy ------=_Part_214406_10083343.1173346557246 Content-Type: application/octet-stream; name=ar_bench.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_ez106nfk Content-Disposition: attachment; filename="ar_bench.rb" IyEvdXNyL2Jpbi9lbnYgcnVieQpyZXF1aXJlICdiZW5jaG1hcmsnCnJlcXVpcmUgJ3J1YnlnZW1z JwpyZXF1aXJlICdhY3RpdmVfcmVjb3JkJwoKCiMgQ29ubmVjdCB0byBkYXRhYmFzZSwgY3JlYXRl IG1lbWJlcnMgdGFibGUsIGRlZmluZSBzb21lIGJlbmNoIG1ldGhvZHMuCmNsYXNzIE1lbWJlciA8 IEFjdGl2ZVJlY29yZDo6QmFzZQogICMgRmFsbGJhY2sgdG8gaW4tbWVtb3J5IFNRTGl0ZSBpZiBN eVNRTCBtZW1iZXJfYmVuY2ggaXNuJ3QgYXZhaWxhYmxlLgogIGJlZ2luCiAgICBlc3RhYmxpc2hf Y29ubmVjdGlvbiA6YWRhcHRlciA9PiAnbXlzcWwnLCA6ZGF0YWJhc2UgPT4gJ21lbWJlcl9iZW5j aCcsIDp1c2VyID0+ICdyb290JwogICAgY29ubmVjdGlvbi5hY3RpdmU/CiAgcmVzY3VlID0+IG15 c3FsX2Vycm9yCiAgICBwdXRzICJ1c2luZyBpbi1tZW1vcnkgc3FsaXRlICgje215c3FsX2Vycm9y fSkiCiAgICBlc3RhYmxpc2hfY29ubmVjdGlvbiA6YWRhcHRlciA9PiAnc3FsaXRlJywgOmRhdGFi YXNlID0+ICc6bWVtb3J5OicKICBlbmQKCiAgY29ubmVjdGlvbi5jcmVhdGVfdGFibGUgdGFibGVf bmFtZSwgOmZvcmNlID0+IHRydWUgZG8gfHR8CiAgICAldyhmaXJzdF9uYW1lIGxhc3RfbmFtZSBh ZGRyZXNzMSBjaXR5IHN0YXRlIGVtYWlsKS5lYWNoIGRvIHxuYW1lfAogICAgICB0LmNvbHVtbiBu YW1lLCA6c3RyaW5nCiAgICBlbmQKICBlbmQKCiAgRklYVFVSRSA9IHsgOmZpcnN0X25hbWUgPT4g J0ZyZWQnLCA6bGFzdF9uYW1lID0+ICdGbGludHN0b25lJywKICAgICAgICAgICAgICA6YWRkcmVz czEgPT4gJzEyMyBIaWdoIFN0LicsIDpjaXR5ID0+ICdSZXlramF2aWsnLAogICAgICAgICAgICAg IDpzdGF0ZSA9PiAnTWljaGlnYW4nLCA6ZW1haWwgPT4gJ2ZyZWRAZmxpbnRzdG9uZS5jb20nIH0K CiAgIyBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIHJlY29yZC4KICBkZWYgc2VsZi5jcmVh dGVfZml4dHVyZQogICAgY3JlYXRlISBGSVhUVVJFCiAgZW5kCgogICMgRXhwbG9kZWQgYSBsaXR0 bGUuCiAgZGVmIHNlbGYuaW5pdGlhbGl6ZV9hbmRfc2F2ZV9maXh0dXJlCiAgICBuZXcoRklYVFVS RSkuc2F2ZSEKICBlbmQKCiAgIyBFeHBsb2RlZCBhIGxpdHRsZSBtb3JlLgogIGRlZiBzZWxmLmlu aXRpYWxpemVfc2V0X2FuZF9zYXZlX2ZpeHR1cmUKICAgIG1lbWJlciA9IG5ldwogICAgRklYVFVS RS5lYWNoIHsgfGtleSwgdmFsdWV8IG1lbWJlci5zZW5kKCIje2tleX09IiwgdmFsdWUpIH0KICAg IG1lbWJlci5zYXZlIQogIGVuZAoKICBkZWYgc2VsZi5pbnNlcnRfdW5xdW90ZWRfZml4dHVyZQog ICAga2V5cyA9IEZJWFRVUkUua2V5cyAqICcsJwogICAgdmFsdWVzID0gRklYVFVSRS52YWx1ZXMu bWFwIHsgfHZ8ICInI3t2fSciIH0gKiAnLCcKICAgIGNvbm5lY3Rpb24uaW5zZXJ0ICJpbnNlcnQg aW50byAje3RhYmxlX25hbWV9ICgje2tleXN9KSB2YWx1ZXMgKCN7dmFsdWVzfSkiCiAgZW5kCgog IGRlZiBzZWxmLmluc2VydF9xdW90ZWRfZml4dHVyZQogICAga2V5cywgdmFsdWVzID0gW10sIFtd CgogICAgRklYVFVSRS5lYWNoIGRvIHxrZXksIHZhbHVlfAogICAgICBrZXlzIDw8IGNvbm5lY3Rp b24ucXVvdGVfY29sdW1uX25hbWUoa2V5KQogICAgICB2YWx1ZXMgPDwgY29ubmVjdGlvbi5xdW90 ZSh2YWx1ZSwgY29sdW1uc19oYXNoW2tleV0pCiAgICBlbmQKCiAgICBjb25uZWN0aW9uLmluc2Vy dCAiaW5zZXJ0IGludG8gI3t0YWJsZV9uYW1lfSAoI3trZXlzICogJywnfSkgdmFsdWVzICgje3Zh bHVlcy5qb2luKCcsJyl9KSIKICBlbmQKCiAgZGVmIHNlbGYuaW5zZXJ0X3F1b3RlZF9maXh0dXJl X3dpdGhfY2FjaGVkX2Nvbm5lY3Rpb24KICAgIGtleXMsIHZhbHVlcyA9IFtdLCBbXQoKICAgIGNv bm4gPSBjb25uZWN0aW9uCiAgICBGSVhUVVJFLmVhY2ggZG8gfGtleSwgdmFsdWV8CiAgICAgIGtl eXMgPDwgY29ubi5xdW90ZV9jb2x1bW5fbmFtZShrZXkpCiAgICAgIHZhbHVlcyA8PCBjb25uLnF1 b3RlKHZhbHVlLCBjb2x1bW5zX2hhc2hba2V5XSkKICAgIGVuZAoKICAgIGNvbm4uaW5zZXJ0ICJp bnNlcnQgaW50byAje3RhYmxlX25hbWV9ICgje2tleXMgKiAnLCd9KSB2YWx1ZXMgKCN7dmFsdWVz LmpvaW4oJywnKX0pIgogIGVuZAplbmQKCmlmIF9fRklMRV9fID09ICQwCiAgbiA9IChBUkdWLnNo aWZ0IHx8IDMwMDApLnRvX2kKICBwdXRzICIoI3tufSBpdGVyYXRpb25zIHBlciB0ZXN0KSIKCiAg QmVuY2htYXJrLmJtYm0gZG8gfHh8CiAgICB7ICdjcmVhdGUnICAgICAgICAgID0+IDpjcmVhdGVf Zml4dHVyZSwKICAgICAgIyduZXcrc2F2ZScgICAgICAgID0+IDppbml0aWFsaXplX2FuZF9zYXZl X2ZpeHR1cmUsCiAgICAgICMnbmV3K3NldCtzYXZlJyAgICA9PiA6aW5pdGlhbGl6ZV9zZXRfYW5k X3NhdmVfZml4dHVyZSwKICAgICAgIydyYXcgcXVvdGVkK2Nvbm4nID0+IDppbnNlcnRfcXVvdGVk X2ZpeHR1cmVfd2l0aF9jYWNoZWRfY29ubmVjdGlvbiwKICAgICAgIydyYXcgdW5xdW90ZWQnICAg ID0+IDppbnNlcnRfdW5xdW90ZWRfZml4dHVyZSwKICAgICAgJ3JhdyBxdW90ZWQnICAgICAgPT4g Omluc2VydF9xdW90ZWRfZml4dHVyZQogICAgfS5lYWNoIGRvIHxuYW1lLCBiZW5jaHwKICAgICAg IyAuZHVwIGJlY2F1c2UgYmVuY2htYXJrIHdhbnRzIHRvIG1vZGlmeSB0aGUgZnJvemVuIHN0cmlu Zywgd3RmCiAgICAgIHgucmVwb3J0IG5hbWUuZHVwIGRvCiAgICAgICAgbi50aW1lcyB7IE1lbWJl ci5zZW5kIGJlbmNoIH0KICAgICAgZW5kCiAgICAgIE1lbWJlci5kZWxldGVfYWxsCgogICAgICB4 LnJlcG9ydCAiI3tuYW1lfSB0eG4iIGRvCiAgICAgICAgTWVtYmVyLnRyYW5zYWN0aW9uIGRvCiAg ICAgICAgICBuLnRpbWVzIHsgTWVtYmVyLnNlbmQgYmVuY2ggfQogICAgICAgIGVuZAogICAgICBl bmQKICAgICAgTWVtYmVyLmRlbGV0ZV9hbGwKICAgIGVuZAogIGVuZAplbmQK ------=_Part_214406_10083343.1173346557246--