如何在Salesforce中通过Apex或API获取各对象详细存储大小(KB/MB/GB)?
获取Salesforce各对象存储使用量的解决方案
核心需求
编程方式获取标准/自定义对象的详细存储占用(KB/MB/GB),替代Setup页面手动查看,用于长期存储监控数据、规划扩容。已尝试的/limits/recordCount仅返回记录数,无法反映真实存储占用。
方法1:Tooling API查询StorageUsage对象
Salesforce的Tooling API提供StorageUsage对象,直接返回每个对象的存储使用明细,是官方支持的精准获取方式。
REST API请求示例
GET /services/data/v58.0/tooling/query?q=SELECT+EntityType,UsedBytes,StorageType+FROM+StorageUsage
响应解析
返回的records数组中每条记录对应一个对象的存储数据:
EntityType:对象API名称(如Account、CustomObject__c)UsedBytes:已占用字节数,可转换为KB/MB/GB(1MB = 1024*1024字节)StorageType:存储类型(Data为记录存储,File为文件/附件存储)
方法2:Apex中调用Tooling API实现
若需在Apex内直接获取并持久化数据,可通过HTTP请求调用Tooling API:
Apex代码示例
public class StorageUsageFetcher { public static List<StorageUsageResult> getObjectStorageUsage() { List<StorageUsageResult> results = new List<StorageUsageResult>(); String endpoint = URL.getSalesforceBaseUrl().toExternalForm() + '/services/data/v58.0/tooling/query?q=SELECT+EntityType,UsedBytes,StorageType+FROM+StorageUsage'; HttpRequest req = new HttpRequest(); req.setEndpoint(endpoint); req.setMethod('GET'); req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId()); HttpResponse res = new Http().send(req); if (res.getStatusCode() != 200) return results; Map<String, Object> responseMap = (Map<String, Object>)JSON.deserializeUntyped(res.getBody()); for (Object record : (List<Object>)responseMap.get('records')) { Map<String, Object> recordMap = (Map<String, Object>)record; StorageUsageResult result = new StorageUsageResult(); result.objectApiName = (String)recordMap.get('EntityType'); result.usedBytes = (Integer)recordMap.get('UsedBytes'); result.storageType = (String)recordMap.get('StorageType'); result.usedMB = result.usedBytes / (1024.0 * 1024.0); results.add(result); } return results; } public class StorageUsageResult { public String objectApiName; public Integer usedBytes; public String storageType; public Double usedMB; } }
使用说明
调用StorageUsageFetcher.getObjectStorageUsage()即可获取全对象存储数据,可将结果存入自定义对象(如StorageHistory__c)实现长期存储与监控。
注意事项
- 权限要求:执行用户需拥有
View Setup and Configuration权限及API访问权限。 - 单位转换:严格使用1024进制转换字节到KB/MB/GB,避免与十进制混淆。
- API版本:
StorageUsage对象支持API v40.0及以上,建议使用最新稳定版本。 - 存储类型筛选:可在SOQL中添加
WHERE StorageType = 'Data'或'File',按需获取对应类型的存储数据。
备选估算方案(Tooling API不可用时)
若无法使用Tooling API,可通过以下方式估算:
- 遍历对象所有字段,计算单条记录的理论占用(文本字段按字符数,数字/日期等按固定字节)。
- 乘以该对象的记录数(通过
/limits/recordCount或SOQLCOUNT()获取)。 - 说明:此方法为估算值,会忽略Salesforce内部存储开销(如索引、元数据),准确性低于Tooling API。
内容的提问来源于stack exchange,提问作者aress
相关产品推荐
相关产品推荐

