Re: Re: RE: [ADMIN] High memory usage [PATCH]

From: Gunnar Rønning <gunnar(at)polygnosis(dot)com>
To: Michael Stephenson <mstephenson(at)tirin(dot)openworld(dot)co(dot)uk>
Cc: "'PostgreSQL jdbc list'" <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: Re: RE: [ADMIN] High memory usage [PATCH]
Date: 2001-06-26 16:26:16
Message-ID: m2lmmfus0n.fsf@smaug.polygnosis.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin pgsql-jdbc pgsql-patches

* Michael Stephenson <mstephenson(at)tirin(dot)openworld(dot)co(dot)uk> wrote:
|
| I've just ran a couple of hugely simplified test (basically starting a
| couple of thousand threads doing sdf.parse() with either synchronization
| or ThreadLocals a couple of times).
|

I agree that the tests are pretty inconclusive. We need something that
simulates real usage better. What platform are you testing on Linux ?
If so with native threads or green threads ?

|
| I personally would advocate applying a patch similar to below to the
| current cvs source.
|

This I don't understand, was your intention to remove thread safety with this
patch ? Looking at the way you introduce SimpleDateFormat as an instance
variable it seems so.

| Michael xxx
|
| --- PreparedStatement.java.orig Tue Jun 26 16:11:16 2001
| +++ PreparedStatement.java Tue Jun 26 16:16:26 2001
| @@ -44,6 +44,9 @@
| private static ThreadLocal tl_df = new ThreadLocal(); // setDate() SimpleDateFormat
| private static ThreadLocal tl_tsdf = new ThreadLocal(); // setTimestamp() SimpleDateFormat
|
| + private SimpleDateFormat sdSdf; // setDate SimpleDateFormat
| + private SimpleDateFormat stSdf; // setTimeStamp SimpleDateFormat
| +
| /**
| * Constructor for the PreparedStatement class.
| * Split the SQL statement into segments - separated by the arguments.
| @@ -65,13 +68,18 @@
| this.sql = sql;
| this.connection = connection;
|
| - // might just as well create it here, so we don't take the hit later
|
| - SimpleDateFormat df = new SimpleDateFormat("''yyyy-MM-dd''");
| - tl_df.set(df);
| -
| - df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
| - tl_tsdf.set(df);
| + // set up our SimpleDateFormats
| + sdSdf = (SimpleDateFormat)tl_df.get();
| + if (sdSdf == null) {
| + sdSdf = new SimpleDateFormat("''yyyy-MM-dd''");
| + tl_df.set(sdSdf);
| + }
| + stSdf = (SimpleDateFormat)tl_tsdf.get();
| + if (stSdf == null) {
| + stSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
| + tl_tsdf.set(df);
| + }
|
| for (i = 0; i < sql.length(); ++i)
| {
| @@ -95,17 +103,6 @@
| templateStrings[i] = (String)v.elementAt(i);
| }
|
| - /**
| - * New in 7.1 - overides Statement.close() to dispose of a few local objects
| - */
| - public void close() throws SQLException
| - {
| - // free the ThreadLocal caches
| - tl_df.set(null);
| - tl_tsdf.set(null);
| - super.close();
| - }
| -
| /**
| * A Prepared SQL query is executed and its ResultSet is returned
| *
| @@ -342,9 +339,7 @@
| */
| public void setDate(int parameterIndex, java.sql.Date x) throws SQLException
| {
| - SimpleDateFormat df = (SimpleDateFormat) tl_df.get();
| -
| - set(parameterIndex, df.format(x));
| + set(parameterIndex, sdSdf.format(x));
|
| // The above is how the date should be handled.
| //
| @@ -381,13 +376,13 @@
| */
| public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException
| {
| - SimpleDateFormat df = (SimpleDateFormat) tl_tsdf.get();
| - df.setTimeZone(TimeZone.getTimeZone("GMT"));
| + stSdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
| // Use the shared StringBuffer
| synchronized(sbuf) {
| sbuf.setLength(0);
| - sbuf.append("'").append(df.format(x)).append('.').append(x.getNanos()/10000000).append("+00'");
| + sbuf.append("'").append(stSdf.format(x)).append('.')
| + .append(x.getNanos()/10000000).append("+00'");
| set(parameterIndex, sbuf.toString());
| }
|
|
|
|
| ---------------------------(end of broadcast)---------------------------
| TIP 2: you can get off all lists at once with the unregister command
| (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
|

--
Gunnar Rønning - gunnar(at)polygnosis(dot)com
Senior Consultant, Polygnosis AS, http://www.polygnosis.com/

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Barry Lind 2001-06-26 16:26:51 Re: [ADMIN] High memory usage [PATCH]
Previous Message Dave Cramer 2001-06-26 16:21:38 RE: Re: RE: [ADMIN] High memory usage [PATCH]

Browse pgsql-jdbc by date

  From Date Subject
Next Message Barry Lind 2001-06-26 16:26:51 Re: [ADMIN] High memory usage [PATCH]
Previous Message Dave Cramer 2001-06-26 16:21:38 RE: Re: RE: [ADMIN] High memory usage [PATCH]

Browse pgsql-patches by date

  From Date Subject
Next Message Barry Lind 2001-06-26 16:26:51 Re: [ADMIN] High memory usage [PATCH]
Previous Message Dave Cramer 2001-06-26 16:21:38 RE: Re: RE: [ADMIN] High memory usage [PATCH]