diff --git a/lib/identity_cache/query_api.rb b/lib/identity_cache/query_api.rb
index <HASH>..<HASH> 100644
--- a/lib/identity_cache/query_api.rb
+++ b/lib/identity_cache/query_api.rb
@@ -32,8 +32,9 @@ module IdentityCache
         if IdentityCache.should_cache?
 
           require_if_necessary do
-            coder = IdentityCache.fetch(rails_cache_key(id)){ coder_from_record(resolve_cache_miss(id)) }
-            object = record_from_coder(coder)
+            object = nil
+            coder = IdentityCache.fetch(rails_cache_key(id)){ coder_from_record(object = resolve_cache_miss(id)) }
+            object ||= record_from_coder(coder)
             IdentityCache.logger.error "[IDC id mismatch] fetch_by_id_requested=#{id} fetch_by_id_got=#{object.id} for #{object.inspect[(0..100)]} " if object && object.id != id.to_i
             object
           end
diff --git a/performance/cache_runner.rb b/performance/cache_runner.rb
index <HASH>..<HASH> 100644
--- a/performance/cache_runner.rb
+++ b/performance/cache_runner.rb
@@ -117,7 +117,8 @@ module HitRunner
   def prepare
     IdentityCache.cache.clear
     (1..@count).each do |i|
-      ::Record.fetch(i)
+      rec = ::Record.fetch(i)
+      rec.fetch_normalized_associated_records
     end
   end
 end
Precache normalized associated records in FetchHit runs

Also "cache" result of resolve_cache_miss in fetch to avoid
record_from_coder overhead.