Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

UTL_HTTP.get_response performance...

Daljit RJan 5 2017 — edited Jan 6 2017

Hi,

Happy new year to the OTN community!

A bit of background I've created some APEX pages that front PL/SQL packages that use UTL_HTTP communicate with a web service to upload and download documents to a document management system. It 'works' from a functionality perspective, I can upload and download documents successfully with a reasonable level of consistency. I've noticed as part of testing that when uploading documents using my screen it is a lot slower than when testing with SOAP UI, for my sample 10Mb file:

SOAP UI: 35 seconds approx.

My PLSQL: 4 minutes (240 seconds) approx.

The SOAP UI XML request takes the following form:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onb="http://hostmachine/webserviceWCF">

<soapenv:Header>

<onb:SessionID>9ec64711-dc8c-46a0-b269-8dddddce388f</onb:SessionID>

<onb:FileExtension>DOCX</onb:FileExtension>

<onb:DocumentTypeId>227</onb:DocumentTypeId>

</soapenv:Header>

<soapenv:Body>

<onb:MTOMStreamIncoming>

<onb:FileContents>+mxa/wCFNS1I6r/wj90lvBeHgtE0YZUbr8y8jLs5ZLmeRzPdXUn3p5SBls

</onb:FileContents>

</onb:MTOMStreamIncoming>

</soapenv:Body>

</soapenv:Envelope>

Points of note, <onb:filecontents> is the file as base64encoded text, so I've just put a small amount in for the example. Other attributes are specific to the document management system.

The SOAP UI Raw request is:

POST http://webserviceWCF/PFOB.svc/Text HTTP/1.1

Accept-Encoding: gzip,deflate

Content-Type: text/xml;charset=UTF-8

SOAPAction: "http://hostmachine/webserviceWCF/IPFOB/AddDocumentViaStream"

Content-Length: 14269305

Host: hostmachine

Connection: Keep-Alive

User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

I convert file blobs to base64clobs and I've pretty-much replicated the header generation in my PL/SQL by making the following calls to UTL_HTTP.set_header:

UTL_HTTP.begin_request (g_url, 'POST', 'HTTP/1.1');

UTL_HTTP.set_header (l_http_req, 'Accept-Encoding', 'gzip,deflate');

UTL_HTTP.set_header (l_http_req,'Content-Type','text/xml; charset=UTF-8');

UTL_HTTP.set_header (l_http_req, 'SOAPAction', 'http://hostmachine/webserviceWCF/IPFOB/AddDocumentViaStream');

UTL_HTTP.set_header (l_http_req, 'Connection', 'Keep-Alive');

UTL_HTTP.set_header (l_http_req, 'Transfer-Encoding', 'chunked');

The base64 encoding and the other calls to UTL_HTTP (write_text) appear to be performing fine, but it is:

l_http_resp := UTL_HTTP.get_response (l_http_req)

Which takes about 4 minutes to execute. So basically all the time is taken up by the above command. Are there any suggestions/known issues or bugs and/or system parameters that can be investigated to try and improve the situation or identify where the slowdown is being encountered? I can understand some overhead due to the database but this doesn't feel right. Downloading the same 10Mb file only takes a few seconds and is comparable with SOAP UI (approx. 3 seconds using both methods). The web service is on the same network and no throttling is in place that I am aware of.

Many thanks,

Daljit

My environment details

  • APEX 5.0.4.00.12
  • Oracle 11g (11.2.0.1), CentOS 5
  • EPG
  • Internet Explorer 11 (Windows 7)
  • Universal Theme

Comments

HajoNormann

The future of modern API design started here.

Key takeaway: Differentiate APIs along "private" and "public"

Microservices are "private"

APIs are "public"

Expect more to come!

1 - 1
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Feb 3 2017
Added on Jan 5 2017
4 comments
1,013 views