RE: Undo Tablespace Error

  • From: "Mark W. Farnham" <mwf@xxxxxxxx>
  • To: "'Lok P'" <loknath.73@xxxxxxxxx>
  • Date: Thu, 9 Sep 2021 08:55:38 -0400

I don’t know whether there is a different error fall back order. I thought the 
error was failing to extend, so I can conceive that it might not try to extend 
with autoextend off and tell you it ran out of space in undo instead of trying 
to extend and failing.

 

It would give me the willies to have maxbytes smaller than the actual size, but 
that is just because it doesn’t make sense to me. Without the source code the 
only way to determine the behavior of the running code is to do an enumerative 
case test seeing what happens.

 

My experiments with UNDO were long ago and I never bothered with the cases that 
didn’t make sense to me to allow, so I cannot definitively answer your question.

 

In your situation, and assuming space is available, I would create a new UNDO 
that was for sure internally consistent with the values you want and then alter 
that online and wait for the current one to be completely inactive and 
eventually drop it. After that, with all the values making sense and being 
internally consistent, I would expect behavior to be easily predictable.

 

IF your shop is somehow attached to the nomenclature of the current UNDO, you 
can replace UNDO twice to get back to the original name, but be patient with 
the complete clearing of the one you’re going to drop and recreate (it won’t 
drop until all transactions are complete, but it might let you kill read only 
queries to drop it, the same as running out of retention time.) I’m a bit rusty 
on this.

 

Other than running away from file corruption errors, the only other reason to 
rotate UNDO was back when a variety of storage performance classes made sense 
with very large history that didn’t need super speed and intermittent large 
transaction batches that benefitted from very fast (like SSD versus spinning 
rust) speeds. Then you briefly switched to the fast stuff, started the batch 
transaction, and immediately switched back. That would put your performance 
requiring transaction on the fast stuff (possibly along with a few other things 
that happened to start before the switch back) and then do the mundane stuff on 
the routine UNDO. The operations control to mesh that was rarely worth the 
trouble and some folks from Oracle mentioned they had deeply tested switching 
but had not deeply tested switching back. It never failed that I saw in some 
cases that were bigger than a bread box. In the days when SSD was extremely 
expensive compared to spinning rust, it was sometimes worth it to do more 
complex operations to buy less of it and get the same benefit.

 

I doubt any of that applies to you. I suppose with the enormous RAM sizes we 
have now and private designations, if you have an operating system with duplex 
RAM for error control putting some UNDO on RAM might be useful. If Oracle wants 
me to do that experiment for them, I’m all ears.

 

Good luck.

 

From: Lok P [mailto:loknath.73@xxxxxxxxx] ;
Sent: Wednesday, September 08, 2021 11:39 PM
To: Mark W. Farnham
Cc: Hemant K Chitale; John Piwowar; Oracle L
Subject: Re: Undo Tablespace Error

 

Thank you. I will try to see the alert log for more details. 

 

But if my understanding is correct , in current scenario with maxsize being set 
there is no difference in undo behaviour if we keep the data file as either 
Autoextend ON or OFF. Correct me if wrong?

 

On Wed, 8 Sep 2021, 11:12 pm Mark W. Farnham, <mwf@xxxxxxxx> wrote:

We cannot tell from the apparent information presented HOW it got to 200. But 
it should not be able to extend beyond the set MAXBYTES. The behavior I would 
have built is to complain if you try to set maxbytes lower than an already 
existing size for a file. If you keep logs of the manual intervention sections 
(at least) or complete alert logs for at least the system, then you might 
discover how it got to 200.

 

Yes, you ARE within the limits of bigfile, presuming that more space is 
available on the storage volume. NO, it should not autoextend if it is at or 
beyond the MAXBYTES defined for the file, and tossing the error you are seeing 
seems correct behavior to me.

 

Sigh.

 

From: Lok P [mailto:loknath.73@xxxxxxxxx] ;
Sent: Wednesday, September 08, 2021 12:13 PM
To: Mark W. Farnham
Cc: Hemant K Chitale; John Piwowar; Oracle L
Subject: Re: Undo Tablespace Error

 

I see it's a bigfile tablespace. And if i am correct it will go beyond normal 
~31Gb individual data file size limit. Correct me if I'm wrong.

 

And then in this case , can it go beyond defined max_bytes? Or is it that at 
the point when it reaches ~160GB size it throws an ora-30036 error and then 
someone has increased the size to ~200GB but it's not updated in 
dba_data_files? But in any scenario, is behaviour of UNDO different if we have 
AUTO EXTEND ON with defined max_size(i.e. our current setup) VS Autoextend OFF 
with the same max_size?

 

On Wed, Sep 8, 2021 at 7:39 PM Mark W. Farnham <mwf@xxxxxxxx> wrote:

If you have a single file limited to 160 and it is already 200, it seems to me 
that file cannot extend. If you have reached 200, then I would expect it to go 
splat failing to extend with autoextend on, because it fails the maxbytes limit.

 

Since the file is already bigger than what  someone probably set it down to 
later, the maxbytes seems like a red herring and autoextend could only come 
into play if you added a file.

 

mwf

 

From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On ;
Behalf Of Lok P
Sent: Wednesday, September 08, 2021 9:00 AM
To: Hemant K Chitale
Cc: John Piwowar; Oracle L
Subject: Re: Undo Tablespace Error

 

Thank you Hemant.

 

to your point "Besides dba_hist_tbsp_space_usage you should also look at 
v$undostat"

 

This error occurred to us 4-5days ago. So from min(begin_time) , I am seeing it 
doesn't have those time data in v$undostat anymore. So is there another way to 
dig into history?

 

If i see current values in v$parameter, We have UNDO_MANGEMENT set as AUTO  
undo_retention set as 3600. If I see current values in dba_data_files we have 
only one data file for the UNDo tablespace. and it has BYTES as 200GB, 
MAXBYTES- 160GB, USER_BYTES- 200GB, Autoextensible- YES. So in this case do you 
suggest just by turning OFF the AUTOEXTEND , we should be good to avoid this 
issue in future? 

 

But I had one question, even if we have AUTOEXTEND ON, as we have defined the 
MAXBYTES as ~160GB for that data file, so that is as good as AUTOEXTEND OFF 
having same maxBytes as ~160GB as because in both of the cases it can't go 
beyond 160GB. Is my understanding wrong here?

 

On Wed, Sep 8, 2021 at 8:14 AM Hemant K Chitale <hemantkchitale@xxxxxxxxx> 
wrote:

 

If you have AUTOEXTEND ON  it is likely that the datafile had already hit the 
MAXSIZE.

So this would result in failure 6 in Oracle Support document " Troubleshooting 
ORA-30036 - Unable To Extend Undo Tablespace (Doc ID 460481.1)


 

Besides dba_hist_tbsp_space_usage you should also look at v$undostat

(also in earlier versions dba_hist_tbsp_space_usage had bugs in reporting 
Tablespace Usage for Undo tablespaces)

 

As John says, if you have AUTOEXTEND ON,  Oracle will try to keep extending 
Undo retention.  Setting a max size for the datafiles and then setting 
AUTOEXTEND OFF is better.


Hemant K Chitale

 

 

On Mon, Sep 6, 2021 at 2:59 AM Lok P <loknath.73@xxxxxxxxx> wrote:

Thank You John. I understand your point that with AUTOEXTENSIBLE YES oracle may 
tend to keep the expired UNDO longer to satisfy retention thereby increasing 
the UNDO tablespace to higher size. But , If we will talk specifically about 
the exact error here , isn't it true that with AUTOEXTENSIBLE YES, it should 
not have made it errored out with Ora-30036 rather it would have 
thrashed/increased UNDO tablespace size by its own?

 

Also as I see from dba_hist_tbspc_space_usage , the UNDO 
usage(tablespace_usedsize) was ~160GB which was equal to tablespace_size when 
it failed with ora-30036 , but then it increased to ~200GB after 4-5hrs, yet to 
see if somebody has increased it manually or it increased by itself.

 

On Sun, Sep 5, 2021 at 2:53 AM John Piwowar <jpiwowar@xxxxxxxxx> wrote:

The “autoextensible” setting on your undo data files is possibly  the culprit 
here. Undo segments are a bit of a special case, and Oracle’s decision-making 
about when to reclaim expired undo can be thrown off when it thinks it has the 
option to extend a data file instead. It’s possible that you might still need 
to resize your undo to accommodate recent changes in your workload, but you’re 
better off with fixed-size undo datafiles, followed by an examination of  your 
automatic undo configuration (undo_retention, etc). 

 

Sorry about the vagueness of the response; I’m on my phone and can’t get decent 
references with my thumbs. :)

 

On Sat, Sep 4, 2021 at 1:05 PM Lok P <loknath.73@xxxxxxxxx> wrote:

Hello Listers, In one of our 12.1 version databases, a few days back we 
encountered an error- "Ora-30036 Unable to extend segment by 128 in tablespace 
'UNDOTBS1'" for a delete query. This failure has never happened before. And we 
were trying to see if we really have to increase the size of UNDO 
tablespace(current size is ~200GB) as it has other impacts like making long 
running queries run even longer before hitting ora-01555/snapshot too old etc. 
Or anyway we can track and fix the long transactions which might have consumed 
large UNDO during that time and then we can try to break that into small 
transactions?

 

Another thing I notice in the dba_data_files is now showing autoextensible as 
YES, so how come this query errored out with Ora-30036/space issues?

 

The USED space in dba_hist_tbspc_space_usage for this UNDO tablespace is 
sometimes showing completely full and sometimes it's a lot empty and i believe 
it's because of a circular buffer.

 

 

-- 

Regards, John P. (Typed with thumbs on a mobile device. Lowered expectations 
appreciated)

Other related posts: