So I am doing a lot of random reads and I am getting only 1-2 lookups per
second where I used to get thousands per second.  I did an HPROF and found
that the root cause relates to the Sun http protocol handler not handling
InputStream.skip() correctly.  So every time it looks up a block it reads
the whole file across the network.

Anyone have any suggestions on how to improve this?  Maybe use the Apache
HTTP Client instead of sun.net?

Here¹s a sample stack (Derby 10.8):

TRACE 373064:
    java.net.SocketInputStream.socketRead0(SocketInputStream.java:Unknown
line)
    java.net.SocketInputStream.read(SocketInputStream.java:129)
    java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
    java.io.BufferedInputStream.read(BufferedInputStream.java:317)
    sun.net.www.MeteredStream.read(MeteredStream.java:116)
    java.io.FilterInputStream.read(FilterInputStream.java:116)
    
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConn
ection.java:2672)
    
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.skip(HttpURLConn
ection.java:2719)
    
org.apache.derby.iapi.services.io.InputStreamUtil.skipPersistent(InputStream
Util.java:169)
    
org.apache.derby.iapi.services.io.InputStreamUtil.skipFully(InputStreamUtil.
java:147)
    
org.apache.derby.impl.store.raw.data.InputStreamContainer.readPositionedPage
(InputStreamContainer.java:208)
    
org.apache.derby.impl.store.raw.data.InputStreamContainer.readPage(InputStre
amContainer.java:186)
    
org.apache.derby.impl.store.raw.data.CachedPage.readPage(CachedPage.java:673
)
    
org.apache.derby.impl.store.raw.data.CachedPage.setIdentity(CachedPage.java:
193)
    
org.apache.derby.impl.services.cache.ConcurrentCache.find(ConcurrentCache.ja
va:295)
    
org.apache.derby.impl.store.raw.data.FileContainer.getUserPage(FileContainer
.java:2541)
    
org.apache.derby.impl.store.raw.data.FileContainer.getPage(FileContainer.jav
a:2591)
    
org.apache.derby.impl.store.raw.data.BaseContainerHandle.getPage(BaseContain
erHandle.java:319)
    
org.apache.derby.impl.store.access.conglomerate.OpenConglomerate.latchPage(O
penConglomerate.java:308)
    
org.apache.derby.impl.store.access.conglomerate.GenericConglomerateControlle
r.fetch(GenericConglomerateController.java:263)
    
org.apache.derby.impl.sql.execute.IndexRowToBaseRowResultSet.getNextRowCore(
IndexRowToBaseRowResultSet.java:389)
    
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNo
PutResultSetImpl.java:478)
    
org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:4
30)
    org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:374)
    com.icrossing.collection.ipinfo.derby.DerbyQuery.run(DerbyQuery.java:90)
    java.lang.Thread.run(Thread.java:680)


iCrossing Privileged and Confidential Information
This email message is for the sole use of the intended recipient(s) and may 
contain confidential and privileged information of iCrossing. Any unauthorized 
review, use, disclosure or distribution is prohibited. If you are not the 
intended recipient, please contact the sender by reply email and destroy all 
copies of the original message.


Reply via email to