One thing you might want to check.....since this is an upgraded server, you might need to increase the stack and stack guard size. I have seen issues with procs not executing (e.g. sp_sysmon) on upgraded ASE's that had smaller stacks previously:
exec sp_configure 'stack size', 194560
exec sp_configure 'stack guard size', 20480
...that may be enough to get sp_sysmon and MDA working to allow better diagnostics
You also said that there wasn't any long running open txns. As you are aware, of course, checkpoint can't truncate passed the truncation point (oldest open txn)....it might be interesting to see where things are with respect to that....you might want to look up loginfo() and during one of the batches do something like:
declare @n int
set @n=0
while @n<=1000
begin
select loginfo(<dbname>,first_page) as first_page,
loginfo(<dbname>,checkpoint_page) as checkpoint_page,
loginfo(<dbname>,oldest_active_transaction_page) as oldest_txn_page
waitfor delay '00:00:01'
select @n=@n+1
end
go
.....by letting it run for 1000 secs, there should be several checkpoints fire....
I also wonder what happens if you do:
use master
go
sp_dboption dbname, 'trunc', false
go
use dbname
go
checkpoint
go
use master
go
sp_dboption dbname, 'trunc', true
go
use dbname
go
checkpoint
go
...in otherwords, I wonder if the bit is set in the system catalog, but the dbtable structure on disk is messed up. You might be able to verify this by checking with dbtable for DBT_AUTOTRUNC:
1> use demo_db
2> go
1> dbcc traceon(3604)
2> go
DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.
1> dbcc dbtable('demo_db')
2> go
DBTABLES (ACTIVE):
DB Table at: 0x0000000029C4C8C0
dbt_dbid=8 dbt_stat=0xc (0x0008 (DBT_AUTOTRUNC), 0x0004 (DBT_SELBULK))
dbt_extstat=0x0 (0x0000)
dbt_stat2=0xffff8003 (0x8000 (DBT2_MIXED_LOG_DATA), 0x0002 (DBT2_NOACCOUNT), 0x0001 (DBT2_LOGFULLABT))
dbt_stat3=0x20800 (0x00020000 (DBT3_SYSPARTITIONS_EXISTS), 0x00000800 (DBT3_DELAYED_COMMIT))
dbt_stat4=0x0 (0x00000000)
dbt_runstat=0x0(0x0000)
dbt_state=0x2(0x0002 (DBST_ACTIVE)) dbt_keep=1 dbt_hdeskeep=0 dbt_next=0x0000000029C44C20 dbt_systask_keep=0 dbt_detachxact_keep 0
dbt_lock=0 dbt_dbaid=1
dbt_verstimestamp= Oct 22 2009 6:28AM dbt_dbname=demo_db
dbt_logrows=0
dbt_lastlogbp=0x00000000438A06F0
dbt_logsema=0000000003BAEE40
dbt_nextseq=12 dbt_oldseq=12
....if not in dbtable, then doing the dboption toggle might help. Otherwise, something is affecting the checkpoint spid in that it isn't running at all - e.g. someone changed the user priority or something.....