Categories
Database Backup

** Discover expert strategies for preventing and resolving MSSQL transaction log full errors (Error 9002). Learn rapid recovery techniques, VLF management, and architectural best practices for DBAs.

I gcóir Riaracháin Bunachar Sonraí (DBAanna) agus innealtóirí DevOps a bhíonn ag bainistiú Microsoft SQL Server, is beag foláireamh a chruthaíonn an oiread sin imní láithreach le Earráid 9002: Tá logáil idirbhirt don bhunachar sonraí ‘X’ lán. Nuair a líontar an logáil idirbhirt agus nach féidir léi fás, éiríonn an bunachar sonraí inléite amháin go héifeachtach. Stopann gach oibríocht INSERT, UPDATE, agus DELETE, teipeann ar idirbhearta feidhmchláir, agus tagann an táirgeadh chun stad iomlán.

Is scileanna ríthábhachtacha iad tuiscint a fháil ar ailtireacht bhunúsach logáil idirbhirt SQL Server, diagnóis chruinn a dhéanamh ar an mbunchúis, agus nósanna imeachta téarnaimh tapa a chur i gcrích chun ard-infhaighteacht a chothabháil. Scrúdaíonn an treoir chuimsitheach seo meicnic na logála idirbhirt, conas logáil lán a réiteach i gcás éigeandála, agus dea-chleachtais ailtireachta chun cosc a chur air tarlú arís.

Tuiscint ar Ailtireacht Logáil Idirbhirt SQL Server

Chun fabhtcheartú éifeachtach a dhéanamh ar logáil idirbhirt lán, ní mór duit ar dtús tuiscint a fháil ar an gcaoi a scríobhann agus a bhainistíonn SQL Server sonraí.

Logáil Réamh-Scríofa (WAL)

Úsáideann SQL Server prótacal Logála Réamh-Scríofa (WAL). Aon uair a tharlaíonn modhnú sonraí, scríobhtar an t-athrú ar dtús chuig an logáil idirbhirt sa chuimhne, ansin sruthlaítear chuig an gcomhad logála fisiciúil ar an diosca é sula ndéantar na leathanaigh sonraí iarbhír a nuashonrú sna comhaid bhunachar sonraí (MDF/NDF). Ráthaíonn sé seo comhlíonadh ACID (Adamhacht, Comhsheasmhacht, Leithlisiú, Marthanacht), ag cinntiú, i gcás timpiste, gur féidir le SQL Server idirbhearta a athsheinm (rolladh ar aghaidh) nó a chealú (rolladh siar).

Comhaid Logála Fíorúla (VLFanna) agus Logáil Chiorclach

Go hinmheánach, roinntear an comhad logála idirbhirt fisiciúil (LDF) ina dheighleoga níos lú, loighciúla ar a dtugtar Comhaid Logála Fíorúla (VLFanna). Oibríonn an logáil idirbhirt go ciorclach. De réir mar a scríobhtar taifid logála, líonann siad VLF amháin agus bogann siad go dtí an chéad cheann eile.

Nuair a shroicheann an logáil deireadh an chomhaid fhisiciúil, déanann sé iarracht filleadh ar an tús. Mar sin féin, ní féidir leis VLF a fhorscríobh ach amháin má tá an VLF sin marcáilte mar neamhghníomhach. Má tá gach VLF gníomhach (rud a chiallaíonn go bhfuil taifid logála iontu atá fós ag teastáil ó SQL Server), ní féidir leis an logáil filleadh. Má tá fás uathoibríoch cumasaithe agus spás diosca ar fáil, fásann an comhad fisiciúil. Má tá an diosca lán nó má tá srian ar fhás uathoibríoch, tiocfaidh tú ar Earráid 9002.

Truncú Logála vs. Laghdú Logála

Is míthuiscint choitianta é go laghdaíonn truncú na logála méid an chomhaid fhisiciúil.
* Truncú Logála: An próiseas chun VLFanna gníomhacha a mharcáil mar neamhghníomhach, rud a fhágann go bhfuil an spás ar fáil le hathúsáid. laghdaíonn sé seo méid an chomhaid LDF ar an diosca.
* Laghdú Logála: An próiseas chun méid an chomhaid LDF a laghdú go fisiciúil agus spás a thabhairt ar ais don chóras oibriúcháin.

Sa tsamhail Téarnaimh Iomlán, tharlaíonn truncú logála ach amháin nuair a chríochnaítear cúltaca logála idirbhirt go rathúil (ag glacadh leis nach bhfuil aon phróisis eile ag coinneáil na logála gníomhach).

Diagnóis ar an Earráid “Logáil Idirbhirt Lán” (Earráid 9002)

Nuair a bhíonn an logáil lán, ní hé do chéad chéim spás diosca a chur leis go dall nó comhaid a laghdú. Ní mór duit a aithint cén fáth nach féidir leis an logáil truncú. Soláthraíonn SQL Server meicníocht ionsuite chun a insint duit go díreach cad atá ag cosc athúsáid logála tríd an amharc catalóige sys.databases.

Rith an t-ordú T-SQL seo a leanas chun an bac a aithint:

SELECT 
    name AS DatabaseName, 
    recovery_model_desc AS RecoveryModel, 
    log_reuse_wait_desc AS LogReuseWaitReason
FROM sys.databases
WHERE name = 'YourDatabaseName';

Is féidir leat úsáid spáis reatha do logálacha idirbhirt a sheiceáil freisin ag baint úsáide as:

DBCC SQLPERF(LOGSPACE);

Stáit choitianta log_reuse_wait_desc

  1. LOG_BACKUP: Tá an bunachar sonraí sa tsamhail téarnaimh Iomlán nó Bulk-Logged, agus níor tógadh cúltaca logála idirbhirt le déanaí. Is é seo an chúis is coitianta.
  2. ACTIVE_TRANSACTION: Tá idirbheart fada (m.sh., aththógáil innéacs ollmhór nó idirbheart neamhthiomanta dearmadta) ag coinneáil na logála gníomhach.
  3. REPLICATION / CDC: Tá Atáirgeadh Idirbheartach nó Gabháil Sonraí Athraithe (CDC) cumasaithe, agus níor phróiseáil an Gníomhaire Léitheoir Logála na hidirbhearta fós.
  4. AVAILABILITY_REPLICA: I nGrúpa Infhaighteachta AlwaysOn, tá macasamhail tánaisteach dícheangailte nó ag sioncrónú ró-mhall, rud a chuireann iallach ar an bpríomh-mhacasamhail taifid logála a choinneáil go dtí go ndéantar iad a chruasú ar an macasamhail tánaisteach.

Straitéisí Téarnaimh Tapa: An Fhadhb a Réiteach i Táirgeadh

Ag brath ar an log_reuse_wait_desc a fhaightear, athróidh do fhreagairt éigeandála. Seo iad na straitéisí téarnaimh tapa do na cásanna is coitianta.

Cás 1: Cúltacaí Logála ar Iarraidh nó ag Teip (LOG_BACKUP)

Má tá an cineál feithimh LOG_BACKUP, tá an réiteach simplí: ní mór duit cúltaca a dhéanamh den logáil idirbhirt.

BACKUP LOG [YourDatabaseName] 
TO DISK = 'N:BackupsYourDatabaseName_EmergencyLog.trn' 
WITH COMPRESSION, STATS = 10;

Nuair a chríochnaíonn an cúltaca, déanfar na VLFanna neamhghníomhacha a truncú, agus atosóidh SQL Server gnáthoibríochtaí. Má tá do thiomáint cúltaca lán, b’fhéidir go mbeidh ort cúltaca a dhéanamh chuig sciar líonra sealadach nó gléas null (ní mholtar go láidir é mura bhfuil an bunachar sonraí in-atáirgthe go héasca, mar go mbriseann sé an slabhra logála):

-- RABHADH: Briseann sé seo an slabhra logála agus cuireann sé isteach ar théarnamh pointe-in-am.
-- Ná húsáid ach amháin má tá sé fíor-riachtanach agus lean láithreach le cúltaca IOMLÁN.
BACKUP LOG [YourDatabaseName] TO DISK = 'NUL';

Cás 2: Idirbhearta Gníomhacha Fada (ACTIVE_TRANSACTION)

Má tá idirbheart amháin ag rith le huaireanta, cuireann sé cosc ar thruncú logála ar feadh na tréimhse ar fad. Ar dtús, aithin an t-idirbheart ciontach:

DBCC OPENTRAN('YourDatabaseName');

Tugann an t-ordú seo an t-idirbheart gníomhach is sine agus a Aitheantas Próisis Freastalaí (SPID) ar ais. Is féidir leat tuilleadh sonraí a bhailiú faoin méid atá an SPID ag déanamh trí cheist a chur ar amhairc bhainistíochta dinimiciúla (DMVanna):

SELECT 
    s.session_id,
    s.login_name,
    s.host_name,
    r.start_time,
    r.status,
    r.command,
    t.text AS QueryText
FROM sys.dm_exec_sessions s
JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE s.session_id = <SPID_FROM_DBCC_OPENTRAN>;

Más ceist chalaoiseach nó próiseas atá i bhfostú é an t-idirbheart, b’fhéidir go mbeidh ort é a fhoirceannadh chun an logáil a shaoradh.

KILL <SPID>;

Nóta: Má mharaítear idirbheart ollmhór spreagfar rolladh siar, rud a d’fhéadfadh méid suntasach ama a thógáil agus ginfidh sé gníomhaíocht logála bhreise go sealadach. Ná atosú seirbhís SQL Server le linn rolladh siar, nó rachaidh an bunachar sonraí isteach i mód téarnaimh nuair a atosófar é.

Cás 3: Leithdháileadh Spáis Éigeandála (Diosca 100% Lán)

Má tá an comhad LDF tar éis an tiomáint ar fad a ithe, ní féidir leat fiú cúltaca a rith mar go dteastaíonn méid beag spáis logála ó SQL Server chun an t-imeacht cúltaca féin a thaifeadadh. Sa chás seo, ní mór duit comhad logála tánaisteach a chur le tiomáint eile a bhfuil spás ar fáil ann.

ALTER DATABASE [YourDatabaseName]
ADD LOG FILE 
(
    NAME = N'YourDatabaseName_Log2',
    FILENAME = N'E:TempLogsYourDatabaseName_Log2.ldf',
    SIZE = 5GB,
    MAXSIZE = 50GB,
    FILEGROWTH = 1GB
);

Soláthraíonn sé seo spás análaithe do SQL Server láithreach. Nuair a bhíonn an bunachar sonraí ar líne, tóg cúltaca logála idirbhirt, folmhaigh an comhad logála tánaisteach, agus bain é:

-- 1. Tóg cúltaca logála chun an logáil a truncú
BACKUP LOG [YourDatabaseName] TO DISK = '...';

-- 2. Folmhaigh an comhad logála sealadach
DBCC SHRINKFILE (N'YourDatabaseName_Log2', EMPTYFILE);

-- 3. Bain an comhad logála sealadach
ALTER DATABASE [YourDatabaseName] REMOVE FILE [YourDatabaseName_Log2];

Dea-Chleachtais maidir le Cosc agus Bainistíocht Logála Idirbhirt

Tá fabhtcheartú imoibríoch strusmhar agus bíonn tionchar aige ar SLAanna. Tá cur i bhfeidhm dea-chleachtais ailtireachta agus oibríochtúla réamhghníomhacha riachtanach do chobhsaíocht bunachar sonraí fiontair.

1. Cuir Straitéis Cúltaca Uathoibrithe Láidir i bhFeidhm

Má tá bunachar sonraí sa tsamhail téarnaimh Iomlán, tá cúltacaí logála idirbhirt go minic éigeantach. Ag brath ar do Chuspóir Pointe Téarnaimh (RPO) agus toirt idirbhirt, ba cheart cúltacaí logála a tharlú gach 5 go 15 nóiméad.

Déanann réitigh chúltaca fiontair cosúil le CloudSave an próiseas seo a shimpliú go suntasach. Trí chomhtháthú go díreach le SQL Server trí VDI (Comhéadan Gléas Fíorúil), ligeann CloudSave do DBAanna cúltacaí logála idirbhirt ard-minicíochta atá bunaithe ar bheartas a chumrú. Cinntíonn sé seo go ndéantar logálacha a truncú go leanúnach, a chriptiú go slán, agus a stóráil lasmuigh den láthair nó i stóráil scamall do-athraithe, rud a choscann staid feithimh LOG_BACKUP gan gá le poist chasta saincheaptha SQL Agent.

2. Méid Ceart na Logála Idirbhirt agus Bainistigh VLFanna

Is frith-phatrún contúirteach é brath ar fhás uathoibríoch chun méid do logála idirbhirt a bhainistiú. Tá oibríochtaí fáis uathoibríoch costasach agus cuireann siad próiseáil idirbhirt ar sos agus an diosca á thúsú go nialas (mura bhfuil Túsú Comhad Meandarach cumasaithe, rud nach mbaineann le comhaid logála).

Thairis sin, bíonn ilroinnt VLF mar thoradh ar fhásanna uathoibríocha beaga go minic (m.sh., ag fás 10% nó 50MB ag an am). Déanfaidh logáil idirbhirt le mílte VLF bídeacha amanna tosaithe bunachar sonraí, feidhmíocht chúltaca, agus latency atáirgthe a dhíghrádú go mór.

  • Réamh-mhéid na logála: Déan anailís ar do chuid oibríochtaí cothabhála is mó (cosúil le haththógáil innéacs) agus réamh-mhéid an chomhaid LDF chun freastal orthu gan fás.
  • Socraigh fás uathoibríoch seasta: Athraigh fás uathoibríoch ó chéatadán go méid seasta (m.sh., 1GB nó 5GB) chun a chinntiú go gcruthaítear VLFanna ag méid sláintiúil.

Is féidir leat do líon VLF a sheiceáil ag baint úsáide as an gceist seo a leanas (do SQL Server 2017+):

SELECT 
    db_name(database_id) AS DatabaseName,
    COUNT(vlf_sequence_number) AS VLF_Count
FROM sys.dm_db_log_info(DB_ID('YourDatabaseName'));

Má tá do líon VLF os cionn 500, smaoinigh ar fanacht ar thréimhse chiúin, an logáil a laghdú go méid íosta, agus é a fhás de láimh ar ais go dtí an méid riachtanach i gcodanna móra.

3. Optamaigh Oibríochtaí Cothabhála Innéacs

Is oibríochtaí logáilte go hiomlán iad aththógáil innéacs, fiú sa tsamhail téarnaimh Bulk-Logged (ag brath ar an gcineál innéacs). Gineann aththógáil innéacs 500GB ar a laghad 500GB de thaifid logála idirbhirt.

Chun bloat logála a mhaolú le linn cothabhála:
* Úsáid SORT_IN_TEMPDB = ON agus innéacsanna á n-aththógáil. Díluchtaíonn sé seo an chéim sórtála chuig TempDB, ag laghdú an ualaigh ar logáil idirbhirt an bhunachar sonraí úsáideora.
* Athraigh ó aththógáil innéacs go reorganize innéacs nuair is féidir, mar go bhfuil reorganizations níos éifeachtaí ó thaobh logála agus is féidir iad a chur isteach gan an oibríocht ar fad a rolladh siar.
* Baisc oibríochtaí móra DELETEUPDATE. In ionad 10 milliún ró a scriosadh in aon idirbheart amháin, scrios iad i mbaisceanna de 50,000, ag tiomnú agus ag ligean do chúltacaí logála an logáil a truncú idir baisceanna.

4. Monatóireacht a dhéanamh ar Ard-Infhaighteacht agus Topolaíochtaí Atáirgthe

I nGrúpaí Infhaighteachta AlwaysOn, ní féidir leis an bpríomh-mhacasamhail a logáil a truncú go dtí go ndéantar na taifid logála a chruasú ar gach macasamhail tánaisteach sioncrónach agus asincrónach.

Má théann macasamhail tánaisteach as líne, nó mura féidir leis an bandaleithead líonra coinneáil suas le ráta giniúna idirbhirt an phríomh-mhacasamhail, fásfaidh scuaine seolta an phríomh-mhacasamhail, agus líonfar an logáil (cineál feithimh AVAILABILITY_REPLICA).

Cuir monatóireacht láidir i bhfeidhm don chuntar feidhmíochta SQLServer:Replica > Log Send Queue. Má chailltear macasamhail tánaisteach go buan, ní mór duit é a bhaint as an nGrúpa Infhaighteachta nó gluaiseacht sonraí a chur ar fionraí chun ligean don phríomh-logáil truncú.

Conclúid

Is rite pasáiste é logáil idirbhirt lán a fháil do riarthóirí bunachar sonraí, ach ní gá go mbeadh aga neamhfhónaimh fada mar thoradh air. Trí thuiscint a fháil ar mheicnic na Logála Réamh-Scríofa agus VLFanna, is féidir leat an bhunchúis a dhiagnóisiú go tapa ag baint úsáide as sys.databases agus an straitéis téarnaimh tapa cheart a chur i bhfeidhm.

Braitheann cobhsaíocht fhadtéarmach ar bhogadh ar shiúl ó shocruithe imoibríocha. Trí do chomhaid logála a réamh-mhéid, gnáthaimh chothabhála a optamú, agus ardáin chúltaca de ghrád fiontair cosúil le CloudSave a úsáid chun sceidil chúltaca logála daingean, uathoibrithe a fhorfheidhmiú, cinnteoidh tú go bhfanfaidh do logálacha idirbhirt sláintiúil, truncaithe, agus réidh chun tacú le hualaí oibre táirgthe ard-tréchur.