Optimising query

Hilaire Fernandes hilaire2006 at laposte.net
Wed Feb 21 18:27:23 UTC 2007


I have measured with MessageTally a method which basically read data on 
a Magma DB to update a local morphic reprensetation (it is about hiding 
some nodes in a graph represented with Morphs). The Magma server and 
client are on two different Internet nodes through ADSL connections.

The method is bellow, and I have attached the MessageTally output. I am 
interested to see how it could be optimized. From MessageTally, it is 
clear a lot time is about waiting
(Leaves: 95.2% {5920ms} Semaphore>>waitTimeoutMSecs:). I guess it is 
related to Internet latency or so?


hideSubCompetencies: aCompetencyMorph
    | topComeptency morph |
    topComeptency := aCompetencyMorph model.
    topComeptency isSubCompetenciesHidden: true.
    (model competenciesWithSuffisanceLinkTo: topComeptency)
       do: [:child |
          morph := view competencyMorph: child
          self hideAllNecessaryLinks: morph.
          self hideSubCompetencies: morph.
          (model links where: [:e | (e owner equals: child)
                   & (e necessary equals: nil)])
             do: [:link | (view linkMorph: link) hide].
          morph hide]

AND:

Model>>competenciesWithSuffisanceLinkTo: aParentCompetency
    ^ (links
          where: [:e | e parent equals: aParentCompetency])
          collect: [:link | link owner]
-------------- next part --------------
 - 6187 tallies, 6219 msec.

**Tree**
99.8% {6207ms} IFICompetencyEditorController>>hideSubCompetencies:
  45.2% {2811ms} MagmaCollectionReader>>do:
    |23.4% {1455ms} MagmaCollectionReader>>at:
    |  |23.4% {1455ms} MagmaCollectionReader>>at:ifOutOfBounds:
    |  |  23.4% {1455ms} MagmaCollectionReader>>primAt:ifOutOfBounds:
    |  |    23.4% {1455ms} MagmaCollectionReader>>loadFromIndex:pageSize:
    |  |      23.4% {1455ms} MagmaCollectionReader>>segmentContaining:
    |  |        23.4% {1455ms} MagmaCollectionReader>>refreshSegment:loadObjects:
    |  |          23.3% {1449ms} MagmaCollection>>refreshSegment:where:...ze:using:loadObjects:
    |  |            23.3% {1449ms} MagmaSession>>refreshSegment:of:where...ize:using:loadObjects:
    |  |              23.3% {1449ms} MagmaSession>>submit:
    |  |                23.3% {1449ms} MaTcpRequestServerLink>>submit:
    |  |                  23.3% {1449ms} MaTcpRequestServerLink>>getByteArrayResponseFor:
    |  |                    22.9% {1424ms} MaClientSocket>>sendData:startingAt:count:waitForReplyIn:
    |  |                      13.8% {858ms} MaClientSocket>>receiveInto:
    |  |                        |13.8% {858ms} Socket>>waitForDataFor:ifClosed:ifTimedOut:
    |  |                        |  13.8% {858ms} Semaphore>>waitTimeoutMSecs:
    |  |                      8.1% {504ms} Socket>>connectTo:port:
    |  |                        8.1% {504ms} Socket>>connectTo:port:waitForConnectionFor:
    |  |                          8.1% {504ms} Socket>>waitForConnectionFor:ifTimedOut:
    |  |                            8.1% {504ms} Semaphore>>waitTimeoutMSecs:
    |21.9% {1362ms} MagmaCollectionReader>>lastKnownSize
    |  21.9% {1362ms} MagmaCollectionReader>>getNextSegmentAndLoad:
    |    21.9% {1362ms} MagmaCollectionReader>>refreshSegment:loadObjects:
    |      21.9% {1362ms} MagmaCollection>>refreshSegment:where:...ze:using:loadObjects:
    |        21.9% {1362ms} MagmaSession>>refreshSegment:of:where...ize:using:loadObjects:
    |          21.9% {1362ms} MagmaSession>>submit:
    |            21.9% {1362ms} MaTcpRequestServerLink>>submit:
    |              21.9% {1362ms} MaTcpRequestServerLink>>getByteArrayResponseFor:
    |                21.9% {1362ms} MaClientSocket>>sendData:startingAt:count:waitForReplyIn:
    |                  12.9% {802ms} MaClientSocket>>receiveInto:
    |                    |12.9% {802ms} Socket>>waitForDataFor:ifClosed:ifTimedOut:
    |                    |  12.9% {802ms} Semaphore>>waitTimeoutMSecs:
    |                  8.3% {516ms} Socket>>connectTo:port:
    |                    8.3% {516ms} Socket>>connectTo:port:waitForConnectionFor:
    |                      8.3% {516ms} Socket>>waitForConnectionFor:ifTimedOut:
    |                        8.3% {516ms} Semaphore>>waitTimeoutMSecs:
  23.1% {1437ms} IFICompetencyEditorController>>hideAllNecessaryLinks:
    |23.0% {1430ms} MagmaCollectionReader>>do:
    |  23.0% {1430ms} MagmaCollectionReader>>lastKnownSize
    |    23.0% {1430ms} MagmaCollectionReader>>getNextSegmentAndLoad:
    |      23.0% {1430ms} MagmaCollectionReader>>refreshSegment:loadObjects:
    |        23.0% {1430ms} MagmaCollection>>refreshSegment:where:...ze:using:loadObjects:
    |          23.0% {1430ms} MagmaSession>>refreshSegment:of:where...ize:using:loadObjects:
    |            23.0% {1430ms} MagmaSession>>submit:
    |              23.0% {1430ms} MaTcpRequestServerLink>>submit:
    |                23.0% {1430ms} MaTcpRequestServerLink>>getByteArrayResponseFor:
    |                  22.8% {1418ms} MaClientSocket>>sendData:startingAt:count:waitForReplyIn:
    |                    14.1% {877ms} MaClientSocket>>receiveInto:
    |                      |14.1% {877ms} Socket>>waitForDataFor:ifClosed:ifTimedOut:
    |                      |  14.1% {877ms} Semaphore>>waitTimeoutMSecs:
    |                    8.1% {504ms} Socket>>connectTo:port:
    |                      8.1% {504ms} Socket>>connectTo:port:waitForConnectionFor:
    |                        8.1% {504ms} Socket>>waitForConnectionFor:ifTimedOut:
    |                          8.1% {504ms} Semaphore>>waitTimeoutMSecs:
  20.3% {1262ms} IFICompetencyEditorController>>hideSubCompetencies:
    |20.3% {1262ms} IFICompetencyEditorModel>>competenciesWithSuffisanceLinkTo:
    |  20.3% {1262ms} MagmaCollectionReader>>collect:
    |    20.3% {1262ms} MagmaCollectionReader>>do:
    |      20.3% {1262ms} MagmaCollectionReader>>lastKnownSize
    |        20.3% {1262ms} MagmaCollectionReader>>getNextSegmentAndLoad:
    |          20.3% {1262ms} MagmaCollectionReader>>refreshSegment:loadObjects:
    |            20.3% {1262ms} MagmaCollection>>refreshSegment:where:...ze:using:loadObjects:
    |              20.3% {1262ms} MagmaSession>>refreshSegment:of:where...ize:using:loadObjects:
    |                20.3% {1262ms} MagmaSession>>submit:
    |                  20.3% {1262ms} MaTcpRequestServerLink>>submit:
    |                    20.3% {1262ms} MaTcpRequestServerLink>>getByteArrayResponseFor:
    |                      20.3% {1262ms} MaClientSocket>>sendData:startingAt:count:waitForReplyIn:
    |                        11.2% {697ms} MaClientSocket>>receiveInto:
    |                          |11.2% {697ms} Socket>>waitForDataFor:ifClosed:ifTimedOut:
    |                          |  11.2% {697ms} Semaphore>>waitTimeoutMSecs:
    |                        8.1% {504ms} Socket>>connectTo:port:
    |                          8.1% {504ms} Socket>>connectTo:port:waitForConnectionFor:
    |                            8.1% {504ms} Socket>>waitForConnectionFor:ifTimedOut:
    |                              8.1% {504ms} Semaphore>>waitTimeoutMSecs:
  11.2% {697ms} IFICompetencyEditorModel>>competenciesWithSuffisanceLinkTo:
    11.2% {697ms} MagmaCollectionReader>>collect:
      11.2% {697ms} MagmaCollectionReader>>do:
        5.8% {361ms} MagmaCollectionReader>>at:
          |5.8% {361ms} MagmaCollectionReader>>at:ifOutOfBounds:
          |  5.8% {361ms} MagmaCollectionReader>>primAt:ifOutOfBounds:
          |    5.8% {361ms} MagmaCollectionReader>>loadFromIndex:pageSize:
          |      5.8% {361ms} MagmaCollectionReader>>segmentContaining:
          |        5.8% {361ms} MagmaCollectionReader>>refreshSegment:loadObjects:
          |          5.8% {361ms} MagmaCollection>>refreshSegment:where:...ze:using:loadObjects:
          |            5.8% {361ms} MagmaSession>>refreshSegment:of:where...ize:using:loadObjects:
          |              5.8% {361ms} MagmaSession>>submit:
          |                5.8% {361ms} MaTcpRequestServerLink>>submit:
          |                  5.8% {361ms} MaTcpRequestServerLink>>getByteArrayResponseFor:
          |                    5.8% {361ms} MaClientSocket>>sendData:startingAt:count:waitForReplyIn:
          |                      3.4% {211ms} MaClientSocket>>receiveInto:
          |                        |3.4% {211ms} Socket>>waitForDataFor:ifClosed:ifTimedOut:
          |                        |  3.4% {211ms} Semaphore>>waitTimeoutMSecs:
          |                      2.1% {131ms} Socket>>connectTo:port:
          |                        2.1% {131ms} Socket>>connectTo:port:waitForConnectionFor:
          |                          2.1% {131ms} Socket>>waitForConnectionFor:ifTimedOut:
          |                            2.1% {131ms} Semaphore>>waitTimeoutMSecs:
        5.4% {336ms} MagmaCollectionReader>>lastKnownSize
          5.4% {336ms} MagmaCollectionReader>>getNextSegmentAndLoad:
            5.4% {336ms} MagmaCollectionReader>>refreshSegment:loadObjects:
              5.4% {336ms} MagmaCollection>>refreshSegment:where:...ze:using:loadObjects:
                5.4% {336ms} MagmaSession>>refreshSegment:of:where...ize:using:loadObjects:
                  5.4% {336ms} MagmaSession>>submit:
                    5.4% {336ms} MaTcpRequestServerLink>>submit:
                      5.4% {336ms} MaTcpRequestServerLink>>getByteArrayResponseFor:
                        5.4% {336ms} MaClientSocket>>sendData:startingAt:count:waitForReplyIn:
                          3.1% {193ms} MaClientSocket>>receiveInto:
                            |3.1% {193ms} Socket>>waitForDataFor:ifClosed:ifTimedOut:
                            |  3.1% {193ms} Semaphore>>waitTimeoutMSecs:
                          2.0% {124ms} Socket>>connectTo:port:
                            2.0% {124ms} Socket>>connectTo:port:waitForConnectionFor:
                              2.0% {124ms} Socket>>waitForConnectionFor:ifTimedOut:
                                2.0% {124ms} Semaphore>>waitTimeoutMSecs:

**Leaves**
95.2% {5920ms} Semaphore>>waitTimeoutMSecs:
3.8% {236ms} Socket>>close

**Memory**
	old			+92,572 bytes
	young		+4,816 bytes
	used		+97,388 bytes
	free		-97,388 bytes

**GCs**
	full			0 totalling 0ms (0.0% uptime)
	incr		32 totalling 5ms (0.0% uptime), avg 0.0ms
	tenures		1 (avg 32 GCs/tenure)
	root table	0 overflows


More information about the Magma mailing list