Skip to content

Commit 96f8f2f

Browse files
committed
storage analyze
1 parent 17a380c commit 96f8f2f

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

mongo/mongo.conf

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ systemLog:
77
storage:
88
journal:
99
enabled: true
10-
dbPath: /home/yangyazhou/backup2
10+
dbPath: /home/yangyazhou/backup
1111
directoryPerDB: true
1212
engine: wiredTiger
1313
wiredTiger:

mongo/src/mongo/db/storage/kv/kv_catalog.cpp

+17-1
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ void KVCatalog::init(OperationContext* opCtx) {
479479
}
480480

481481
// No rollback since this is just loading already committed data.
482+
//表及其对应的ident信息
482483
string ns = obj["ns"].String();
483484
string ident = obj["ident"].String();
484485
_idents[ns] = Entry(ident, record->id);
@@ -571,6 +572,10 @@ Status KVCatalog::newCollection(OperationContext* opCtx,
571572

572573
//更新_idents,记录下集合对应元数据信息,也就是集合路径 集合uuid 集合索引,以及在元数据_mdb_catalog.wt中的位置
573574
old = Entry(ident, res.getValue());
575+
//2021-05-01T11:12:42.394+0800 D STORAGE [conn-1] stored meta data for test.mycol @ RecordId(6)
576+
//obj:{ ns: "test.mycol", ident: "test/collection/1--6948813758302814892", md: { ns: "test.mycol",
577+
//options: { uuid: UUID("75591c22-bd0f-4a56-ac95-ef90224cf3df"), capped: true, size: 6142976, max: 10000, autoIndexId: true },
578+
//indexes: [], prefix: -1 } }
574579
//集合元数据信息存入_mdb_catalog.wt
575580
LOG(1) << "stored meta data for " << ns << " @ " << res.getValue() << " obj:" << redact(obj);;
576581
return Status::OK();
@@ -594,7 +599,7 @@ std::string KVCatalog::getIndexIdent(OperationContext* opCtx,
594599
return idxIdent[idxName].String();
595600
}
596601

597-
//_mdb_catalog.wt中查找 KVCatalog::getMetaData中执行
602+
//_mdb_catalog.wt中查找 下面的KVCatalog::getMetaData中执行
598603
BSONObj KVCatalog::_findEntry(OperationContext* opCtx, StringData ns, RecordId* out) const {
599604
RecordId dl;
600605
{
@@ -626,6 +631,7 @@ BSONObj KVCatalog::_findEntry(OperationContext* opCtx, StringData ns, RecordId*
626631
//KVStorageEngine::reconcileCatalogAndIdents KVStorageEngine::KVStorageEngine
627632

628633
//获取MetaData信息,KVCollectionCatalogEntry::_getMetaData调用
634+
//获取表ns的元数据信息
629635
const BSONCollectionCatalogEntry::MetaData KVCatalog::getMetaData(OperationContext* opCtx,
630636
StringData ns) {
631637
BSONObj obj = _findEntry(opCtx, ns);
@@ -645,6 +651,8 @@ const BSONCollectionCatalogEntry::MetaData KVCatalog::getMetaData(OperationConte
645651

646652
//KVCollectionCatalogEntry类的如下相关接口完成对MetaData的更新:updateValidator updateFlags setIsTemp removeUUID addUUID updateTTLSetting indexBuildSuccess
647653
//KVCollectionCatalogEntry类的相关接口调用,完成MetaData相关成员更新
654+
655+
//更新某个表的元数据信息 KVCollectionCatalogEntry类的相关接口调用,完成MetaData相关成员更新
648656
void KVCatalog::putMetaData(OperationContext* opCtx,
649657
StringData ns,
650658
BSONCollectionCatalogEntry::MetaData& md) {
@@ -685,11 +693,18 @@ void KVCatalog::putMetaData(OperationContext* opCtx,
685693
//{ _id: BinData(0, 00) }, head: 0, prefix: -1 } ], prefix: -1 }, idxIdent: { _id_: "admin/index/1--9034870482849730886" },
686694
//ns: "admin.system.version", ident: "admin/collection/0--9034870482849730886" }
687695

696+
//建一个新表的元数据打印:db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
697+
//{ md: { ns: "test.mycol", options: { uuid: UUID("75591c22-bd0f-4a56-ac95-ef90224cf3df"), capped: true, size: 6142976, max: 10000, autoIndexId: true },
698+
//indexes: [ { spec: { v: 2, key: { _id: 1 }, name: "_id_", ns: "test.mycol" }, ready: false, multikey: false,
699+
//multikeyPaths: { _id: BinData(0, 00) }, head: 0, prefix: -1 } ], prefix: -1 }, idxIdent: { _id_: "test/index/2--6948813758302814892" },
700+
//ns: "test.mycol", ident: "test/collection/1--6948813758302814892" }
701+
688702
LOG(3) << "recording new metadata: " << obj;
689703
Status status = _rs->updateRecord(opCtx, loc, obj.objdata(), obj.objsize(), false, NULL);
690704
fassert(28521, status.isOK());
691705
}
692706

707+
//表重命名后元数据也要更新
693708
Status KVCatalog::renameCollection(OperationContext* opCtx,
694709
StringData fromNS,
695710
StringData toNS,
@@ -732,6 +747,7 @@ Status KVCatalog::renameCollection(OperationContext* opCtx,
732747
//drop删表CmdDrop::errmsgRun->dropCollection->DatabaseImpl::dropCollectionEvenIfSystem->DatabaseImpl::_finishDropCollection
733748
// ->DatabaseImpl::_finishDropCollection->KVDatabaseCatalogEntryBase::dropCollection->KVCatalog::dropCollection
734749
//配合KVDatabaseCatalogEntryBase::createCollection->KVCatalog::newCollection阅读
750+
//删除表后需要从元数据中删除该表
735751
Status KVCatalog::dropCollection(OperationContext* opCtx, StringData ns) {
736752
invariant(opCtx->lockState()->isDbLockedForMode(nsToDatabaseSubstring(ns), MODE_X));
737753
stdx::lock_guard<stdx::mutex> lk(_identsLock);

mongo/src/mongo/db/storage/kv/kv_database_catalog_entry_base.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -409,12 +409,13 @@ Status KVDatabaseCatalogEntryBase::dropCollection(OperationContext* opCtx, Strin
409409
KVCollectionCatalogEntry* const entry = it->second;
410410

411411
invariant(entry->getTotalIndexCount(opCtx) == entry->getCompletedIndexCount(opCtx));
412-
412+
//先清除该表的所有索引
413413
{
414414
std::vector<std::string> indexNames;
415415
entry->getAllIndexes(opCtx, &indexNames);
416416
for (size_t i = 0; i < indexNames.size(); i++) {
417417
//KVCollectionCatalogEntry::removeIndex
418+
//从该表MetaData元数据中清除该index,并清除索引文件
418419
entry->removeIndex(opCtx, indexNames[i]).transitional_ignore();
419420
}
420421
}
@@ -424,7 +425,8 @@ Status KVDatabaseCatalogEntryBase::dropCollection(OperationContext* opCtx, Strin
424425
const std::string ident = _engine->getCatalog()->getCollectionIdent(ns);
425426

426427
//KVStorageEngine::getCatalog获取KVDatabaseCatalogEntry KVStorageEngine::getCatalog获取KVCatalog
427-
//KVCatalog::dropCollection
428+
//KVCatalog::dropCollection
429+
//删除表后需要从元数据中删除该表
428430
Status status = _engine->getCatalog()->dropCollection(opCtx, ns);
429431
if (!status.isOK()) {
430432
return status;
@@ -437,6 +439,7 @@ Status KVDatabaseCatalogEntryBase::dropCollection(OperationContext* opCtx, Strin
437439
//最终外层调用触发RemoveCollectionChange::commit真正进行删除
438440
new RemoveCollectionChange(opCtx, this, ns, ident, it->second, true));
439441

442+
//从cache中清除该表
440443
_collections.erase(ns.toString());
441444

442445
return Status::OK();

mongo/src/mongo/db/storage/record_data.h

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class RecordData {
8282
return isOwned() ? BSONObj(releaseBuffer()) : BSONObj(_data);
8383
}
8484

85+
//打印可以参考KVCatalog::_findEntry
8586
BSONObj toBson() && {
8687
return releaseToBson();
8788
}

0 commit comments

Comments
 (0)