Skip to content

Commit a0a665d

Browse files
alex-plekhanovzstan
authored andcommitted
IGNITE-27687 Add metrics for inserted/removed bytes to/from cache group - Fixes #12670.
Signed-off-by: Aleksey Plekhanov <plehanov.alex@gmail.com> (cherry picked from commit 1154765)
1 parent 2af0e4b commit a0a665d

15 files changed

Lines changed: 272 additions & 35 deletions

File tree

docs/_docs/monitoring-metrics/new-metrics.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ Register name: `io.statistics.cacheGroups.{group_name}`
244244
|grpId | integer | Group id
245245
|name | string | Name of the index
246246
|startTime | long | Statistics collect start time
247+
|insertedBytes | long | Count of inserted to store bytes
248+
|removedBytes | long | Count of removed from store bytes
247249
|===
248250

249251

docs/_docs/monitoring-metrics/system-views.adoc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,21 @@ This view exposes information about the distribution of cache group partitions a
789789
|IS_PRIMARY | boolean | Primary partition flag
790790
|===
791791

792+
== LOCAL_CACHE_GROUPS_IO
793+
794+
This view exposes information about local node IO statistics for cache groups.
795+
796+
[{table_opts}]
797+
|===
798+
|Column | Data type | Description
799+
|CACHE_GROUP_ID | int| Cache group ID
800+
|CACHE_GROUP_NAME | string| Cache group name
801+
|PHYSICAL_READS | long | Count of logical page reads
802+
|LOGICAL_READS | long | Count of physical page reads
803+
|INSERTED_BYTES | long | Count of inserted to store bytes
804+
|REMOVED_BYTES | long | Count of removed from store bytes
805+
|===
806+
792807
== BINARY_METADATA
793808

794809
This view exposes information about all available binary types.

modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,8 @@ public void testGetAllColumns() throws Exception {
767767
"SYS.LOCAL_CACHE_GROUPS_IO.CACHE_GROUP_NAME.null",
768768
"SYS.LOCAL_CACHE_GROUPS_IO.PHYSICAL_READS.null",
769769
"SYS.LOCAL_CACHE_GROUPS_IO.LOGICAL_READS.null",
770+
"SYS.LOCAL_CACHE_GROUPS_IO.INSERTED_BYTES.null",
771+
"SYS.LOCAL_CACHE_GROUPS_IO.REMOVED_BYTES.null",
770772
"SYS.SQL_QUERIES_HISTORY.SCHEMA_NAME.null",
771773
"SYS.SQL_QUERIES_HISTORY.SQL.null",
772774
"SYS.SQL_QUERIES_HISTORY.LOCAL.null",

modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolder.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,20 @@ public interface IoStatisticsHolder {
3636
*/
3737
public void trackPhysicalAndLogicalRead(long pageAddr);
3838

39+
/**
40+
* Track insert data to the page.
41+
*
42+
* @param bytes Bytes inserted.
43+
*/
44+
public void trackPageInsertData(long bytes);
45+
46+
/**
47+
* Track remove data from the page.
48+
*
49+
* @param bytes Bytes removed.
50+
*/
51+
public void trackPageRemoveData(long bytes);
52+
3953
/**
4054
* @return Number of logical reads.
4155
*/

modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderCache.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,24 @@ public class IoStatisticsHolderCache implements IoStatisticsHolder {
3838
/** */
3939
public static final String LOGICAL_READS = "LOGICAL_READS";
4040

41+
/** */
42+
public static final String INSERTED_BYTES = "insertedBytes";
43+
44+
/** */
45+
public static final String REMOVED_BYTES = "removedBytes";
46+
4147
/** */
4248
private final LongAdderMetric logicalReadCtr;
4349

4450
/** */
4551
private final LongAdderMetric physicalReadCtr;
4652

53+
/** */
54+
private final LongAdderMetric insertedBytes;
55+
56+
/** */
57+
private final LongAdderMetric removedBytes;
58+
4759
/** */
4860
private final String grpName;
4961

@@ -67,8 +79,10 @@ public IoStatisticsHolderCache(String grpName, int grpId, GridMetricManager mmgr
6779
mreg.objectMetric("name", String.class, null).value(grpName);
6880
mreg.intMetric("grpId", null).value(grpId);
6981

70-
this.logicalReadCtr = mreg.longAdderMetric(LOGICAL_READS, null);
71-
this.physicalReadCtr = mreg.longAdderMetric(PHYSICAL_READS, null);
82+
logicalReadCtr = mreg.longAdderMetric(LOGICAL_READS, "Count of logical page reads");
83+
physicalReadCtr = mreg.longAdderMetric(PHYSICAL_READS, "Count of physical page reads");
84+
insertedBytes = mreg.longAdderMetric(INSERTED_BYTES, "Count of inserted to store bytes");
85+
removedBytes = mreg.longAdderMetric(REMOVED_BYTES, "Count of removed from store bytes");
7286
}
7387

7488
/** {@inheritDoc} */
@@ -95,6 +109,16 @@ public IoStatisticsHolderCache(String grpName, int grpId, GridMetricManager mmgr
95109
}
96110
}
97111

112+
/** {@inheritDoc} */
113+
@Override public void trackPageInsertData(long bytes) {
114+
insertedBytes.add(bytes);
115+
}
116+
117+
/** {@inheritDoc} */
118+
@Override public void trackPageRemoveData(long bytes) {
119+
removedBytes.add(bytes);
120+
}
121+
98122
/** {@inheritDoc} */
99123
@Override public long logicalReads() {
100124
return logicalReadCtr.value();

modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderIndex.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,16 @@ public IoStatisticsHolderIndex(
141141
}
142142
}
143143

144+
/** {@inheritDoc} */
145+
@Override public void trackPageInsertData(long bytes) {
146+
// No-op.
147+
}
148+
149+
/** {@inheritDoc} */
150+
@Override public void trackPageRemoveData(long bytes) {
151+
// No-op.
152+
}
153+
144154
/** {@inheritDoc} */
145155
@Override public long logicalReads() {
146156
return logicalReadLeafCtr.value() + logicalReadInnerCtr.value();

modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderNoOp.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,22 @@ private IoStatisticsHolderNoOp() {
3434

3535
/** {@inheritDoc} */
3636
@Override public void trackLogicalRead(long pageAddr) {
37+
// No-op.
3738
}
3839

3940
/** {@inheritDoc} */
4041
@Override public void trackPhysicalAndLogicalRead(long pageAddr) {
42+
// No-op.
43+
}
44+
45+
/** {@inheritDoc} */
46+
@Override public void trackPageInsertData(long bytes) {
47+
// No-op.
48+
}
49+
50+
/** {@inheritDoc} */
51+
@Override public void trackPageRemoveData(long bytes) {
52+
// No-op.
4153
}
4254

4355
/** {@inheritDoc} */

modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderQuery.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ public class IoStatisticsHolderQuery implements IoStatisticsHolder {
5353
physicalReadCtr.increment();
5454
}
5555

56+
/** {@inheritDoc} */
57+
@Override public void trackPageInsertData(long bytes) {
58+
// No-op.
59+
}
60+
61+
/** {@inheritDoc} */
62+
@Override public void trackPageRemoveData(long bytes) {
63+
// No-op.
64+
}
65+
5666
/** {@inheritDoc} */
5767
@Override public long logicalReads() {
5868
return logicalReadCtr.longValue();

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/AbstractFreeList.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ private final class UpdateRowHandler extends PageHandler<T, Boolean> {
135135

136136
PageUtils.getBytes(pageAddr, data.offset(), payload, 0, rowSize);
137137

138+
statHolder.trackPageRemoveData(rowSize);
139+
statHolder.trackPageInsertData(rowSize);
140+
138141
wal.log(new DataPageUpdateRecord(
139142
cacheId,
140143
pageId,
@@ -164,9 +167,9 @@ private class WriteRowHandler extends PageHandler<T, Integer> {
164167
Boolean walPlc,
165168
T row,
166169
int written,
167-
IoStatisticsHolder statHolder)
168-
throws IgniteCheckedException {
169-
written = addRow(pageId, page, pageAddr, iox, row, written);
170+
IoStatisticsHolder statHolder
171+
) throws IgniteCheckedException {
172+
written = addRow(pageId, page, pageAddr, iox, row, written, statHolder);
170173

171174
putPage(((AbstractDataPageIO)iox).getFreeSpace(pageAddr), pageId, page, pageAddr, statHolder);
172175

@@ -180,6 +183,7 @@ private class WriteRowHandler extends PageHandler<T, Integer> {
180183
* @param iox IO.
181184
* @param row Row to write.
182185
* @param written Written size.
186+
* @param statHolder IO statistics holder.
183187
* @return Number of bytes written, {@link #COMPLETE} if the row was fully written.
184188
* @throws IgniteCheckedException If failed.
185189
*/
@@ -189,8 +193,9 @@ protected Integer addRow(
189193
long pageAddr,
190194
PageIO iox,
191195
T row,
192-
int written)
193-
throws IgniteCheckedException {
196+
int written,
197+
IoStatisticsHolder statHolder
198+
) throws IgniteCheckedException {
194199
AbstractDataPageIO<T> io = (AbstractDataPageIO<T>)iox;
195200

196201
long lastLink = row.link();
@@ -209,6 +214,8 @@ protected Integer addRow(
209214

210215
evictionTracker.trackFragmentPage(pageId, lastLink, written == rowSize);
211216

217+
statHolder.trackPageInsertData(oldFreeSpace - io.getFreeSpace(pageAddr));
218+
212219
// Avoid boxing with garbage generation for usual case.
213220
return written == rowSize ? COMPLETE : written;
214221
}
@@ -324,8 +331,8 @@ private final class WriteRowsHandler extends PageHandler<GridCursor<T>, Integer>
324331
Boolean walPlc,
325332
GridCursor<T> cur,
326333
int written,
327-
IoStatisticsHolder statHolder)
328-
throws IgniteCheckedException {
334+
IoStatisticsHolder statHolder
335+
) throws IgniteCheckedException {
329336
AbstractDataPageIO<T> io = (AbstractDataPageIO<T>)iox;
330337

331338
// Fill the page up to the end.
@@ -341,7 +348,7 @@ private final class WriteRowsHandler extends PageHandler<GridCursor<T>, Integer>
341348
break;
342349
}
343350

344-
written = writeRowHnd.addRow(pageId, page, pageAddr, io, row, written);
351+
written = writeRowHnd.addRow(pageId, page, pageAddr, io, row, written, statHolder);
345352

346353
assert written == COMPLETE;
347354
}
@@ -377,8 +384,8 @@ private final class RemoveRowHandler extends PageHandler<ReuseBag, Long> {
377384
Boolean walPlc,
378385
ReuseBag reuseBag,
379386
int itemId,
380-
IoStatisticsHolder statHolder)
381-
throws IgniteCheckedException {
387+
IoStatisticsHolder statHolder
388+
) throws IgniteCheckedException {
382389
AbstractDataPageIO<T> io = (AbstractDataPageIO<T>)iox;
383390

384391
int oldFreeSpace = io.getFreeSpace(pageAddr);
@@ -418,6 +425,8 @@ else if (putIsNeeded)
418425
put(null, pageId, page, pageAddr, newBucket, statHolder);
419426
}
420427

428+
statHolder.trackPageRemoveData(newFreeSpace - oldFreeSpace);
429+
421430
// For common case boxed 0L will be cached inside of Long, so no garbage will be produced.
422431
return nextLink;
423432
}

modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheGroupIoView.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
import org.apache.ignite.metric.MetricRegistry;
2323
import org.apache.ignite.spi.metric.LongMetric;
2424

25+
import static org.apache.ignite.internal.metric.IoStatisticsHolderCache.INSERTED_BYTES;
2526
import static org.apache.ignite.internal.metric.IoStatisticsHolderCache.LOGICAL_READS;
2627
import static org.apache.ignite.internal.metric.IoStatisticsHolderCache.PHYSICAL_READS;
28+
import static org.apache.ignite.internal.metric.IoStatisticsHolderCache.REMOVED_BYTES;
2729

2830
/**
2931
* Cache group IO statistics representation for a {@link SystemView}.
@@ -79,4 +81,24 @@ public long logicalReads() {
7981

8082
return metric != null ? metric.value() : 0;
8183
}
84+
85+
/**
86+
* @return Inserted bytes into store.
87+
*/
88+
@Order(4)
89+
public long insertedBytes() {
90+
LongMetric metric = mreg.findMetric(INSERTED_BYTES);
91+
92+
return metric != null ? metric.value() : 0;
93+
}
94+
95+
/**
96+
* @return Removed bytes from store.
97+
*/
98+
@Order(5)
99+
public long removedBytes() {
100+
LongMetric metric = mreg.findMetric(REMOVED_BYTES);
101+
102+
return metric != null ? metric.value() : 0;
103+
}
82104
}

0 commit comments

Comments
 (0)