kubectl wait コマンドの --for=condition=XXXX に指定できる値を調べる
お仕事で同僚のエンジニアから kubectl wait
の --for=condition=XXXX
に指定できる値 (condition の種類) ってどこで確認できるの?的な質問をもらったのですが、自分も知らなかったので調べてみました。
先に結論
kubernetes/pkg/apis/ 配下の各 API (core や apps 等) のディレクトリ配下にある types.go
というファイルで Condition の名前 (種類) が定義されているようです。
全てのリソースを確認した訳ではありませんが、例えば以下のような感じで各リソースの Condition が定義されているっぽいことが確認できました。
いろいろ調査
先に結論を書きましたが、自分用の備忘録も兼ねて調査の過程を残しておきます。興味がある方はご覧ください。
環境
今回は Kubernetes v1.26 をベースに調べました。
とりあえず --help を確認
まずは kubectl wait
コマンドの help を見てみたのですが、「condition-name
を指定する」と書いてあるのみで、この condition-name
に「どのような値を指定できるのか」という情報は見当たりませんでした。
$ kubectl wait --help (snip) Options: (snip) --for='': The condition to wait on: [delete|condition=condition-name[=condition-value]|jsonpath='{JSONPath expression}'=JSONPath Condition]. The default condition-value is true. Condition values are compared after Unicode simple case folding, which is a more general form of case-insensitivity.
kubectl wait のドキュメントを確認
kubectl wait
の --help
では分からなかったので、Kubernetes の公式ドキュメント Kubectl Reference Docs を調べてみました。
しかし、こちらの --for
の説明も以下のようになっており、「どのような値を指定できるのか」という情報は見当たりませんでした。
The condition to wait on: [delete|condition=condition-name]. The default status value of condition-name is true, you can set false with condition=condition-name=false
雑にググってみる
--help
やリファレンスマニュアルでは情報が見つからなかったので、それっぽいキーワードでググってみたところ、Kubernetes の公式ドキュメント Pod Lifecycle に「Pod の Condition の一覧」が記載されていました。しかし、Deployment 等の 「Pod 以外のリソース」の Condition の一覧のような情報が記載されたドキュメントは (私が探した範囲では) なさそうでした。
また、上記 Pod Lifecycle を見ると、Pod の Condition は PodCondition という構造体で定義されているっぽいことが確認できました。
PodCondition から情報を探る
前述した Pod Lifecycle を見ると type の説明が "Name of this Pod condition." となっており、どうやらこの type の値が Condition の名前になっているようです。また、PodCondition 側の type の説明にも "Type is the type of the condition." と記載されていました。
そこで、このあたりから「Kubernetes のリソースの Condition の名前 (種類) がどこで定義されているか」を探ってみました。
この PodCondition は "Appears In: PodStatus [core/v1]" となっています。さらに、PodStatus は "Appears In: Pod [core/v1]" となっています。
ということで、Pod の Condition の値 (名前?) は Pod -> PodStatus -> PodCondition -> type で定義されていそう、ということがわかりました。
kubectl explain から情報を探る
なんとなく type (Condition の名前) が定義されていそうな場所が分かったので、kubectl explain
コマンドで対応していそうなフィールドを探してみました。
まず、kubectl explain pod
を実行すると pod.status
というフィールドがあることが確認できました。
$ kubectl explain pod (snip) FIELDS: (snip) status <Object> Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
次に、kubectl explain pod.status
を実行すると pod.status.conditions
というそれっぽい感じのフィールドが見つかりました。
$ kubectl explain pod.status (snip) FIELDS: conditions <[]Object> Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
さらに、kubectl explain pod.status.conditions
を実行してみると、pod.status.conditions.type
というフィールドがありました。
$ kubectl explain pod.status.conditions (snip) FIELDS: (snip) type <string> -required- Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
最後に kubectl explain pod.status.conditions.type
を実行すると、最初にググった際に見つかったドキュメントへの URL (Pod の Condition の一覧が記載されていたドキュメントの URL) が記載されていました。どうやら、この pod.status.conditions.type
で Condition の名前 (種類) が定義されている、ということで間違いなさそうです。
$ kubectl explain pod.status.conditions.type KIND: Pod VERSION: v1 FIELD: type <string> DESCRIPTION: Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
他のリソースについても kubectl explain から情報を探ってみる
Pod の場合は pod.status.conditions.type
で Condition の名前 (種類) が定義されていそうな感じだったので、試しに他のリソースについても同じフィールド (xxxx.status.conditions.type
) が存在しているか確認してみました。すると、(全てのリソースを確認した訳ではないですが) 他のリソースにも同様のフィールドが存在しているようでした。
$ kubectl explain node.status.conditions.type KIND: Node VERSION: v1 FIELD: type <string> DESCRIPTION: Type of node condition.
$ kubectl explain deployment.status.conditions.type KIND: Deployment VERSION: apps/v1 FIELD: type <string> DESCRIPTION: Type of deployment condition.
$ kubectl explain replicaset.status.conditions.type KIND: ReplicaSet VERSION: apps/v1 FIELD: type <string> DESCRIPTION: Type of replica set condition.
しかし、どのリソースの DESCRIPTION にも "Type of XXXX condition." としか記載されておらず、具体的な Condition の名前 (種類) は確認できませんでした... (´・ω・`)
ソースコードを調べる
ドキュメントや kubectl explain
コマンドではこれ以上詳細な情報が得られそうになかったので、ソースコードを調べました。ドキュメントから PodCondition という構造体が存在していそうなことが確認できていたので、この PodCondition
というキーワードでソースコード内を検索したところ、以下の構造体が見つかりました。
https://github.com/kubernetes/kubernetes/blob/v1.26.4/pkg/apis/core/types.go#L2485-L2497
// PodCondition represents pod's condition type PodCondition struct { Type PodConditionType Status ConditionStatus // +optional LastProbeTime metav1.Time // +optional LastTransitionTime metav1.Time // +optional Reason string // +optional Message string }
Type
は PodConditionType
型になっているようなので、この PodConditionType
の定義を探してみると、すぐ隣に以下のような定義がありました。
https://github.com/kubernetes/kubernetes/blob/v1.26.4/pkg/apis/core/types.go#L2460-L2483
// PodConditionType defines the condition of pod type PodConditionType string // These are valid conditions of pod. const ( // PodScheduled represents status of the scheduling process for this pod. PodScheduled PodConditionType = "PodScheduled" // PodReady means the pod is able to service requests and should be added to the // load balancing pools of all matching services. PodReady PodConditionType = "Ready" // PodInitialized means that all init containers in the pod have started successfully. PodInitialized PodConditionType = "Initialized" // PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler // can't schedule the pod right now, for example due to insufficient resources in the cluster. PodReasonUnschedulable = "Unschedulable" // PodReasonSchedulingGated reason in PodScheduled PodCondition means that the scheduler // skips scheduling the pod because one or more scheduling gates are still present. PodReasonSchedulingGated = "SchedulingGated" // ContainersReady indicates whether all containers in the pod are ready. ContainersReady PodConditionType = "ContainersReady" // DisruptionTarget indicates the pod is about to be terminated due to a // disruption (such as preemption, eviction API or garbage-collection). DisruptionTarget PodConditionType = "DisruptionTarget" )
kubectl explain pod.status.conditions
を実行した際に表示されていたドキュメント Pod conditions に記載されている Condition の内容ともだいたい一致しているようなので、Condition の名前 (種類) はここで定義されているようです。
ただ、ドキュメント Pod conditions とこのソースコード上の定義は厳密には合致していないようです... もしかしたらバージョンの違い (「ドキュメントが前提にしているバージョン」と「確認したソースコードのバージョン」が違う?) 等による差異があるのかもしれませんが、これ以上の詳細はよくわかりませんでした...
まとめ
ということで、kubectl wait
の --for=condition=XXXX
に指定できる値を知るために、Kubernetes の各リソースの Condition がどこで定義されているかを探してみました。
再掲になりますが、kubernetes/pkg/apis/ 配下の各 API (core や apps 等) のディレクトリ配下にある types.go
というファイルで Condition の名前 (種類) が定義されているようです。
最近、稀に Kubernetes のソースコードを読むことがあるのですが、Kubernetes はコードの量が膨大でやばいですね (語彙力)。
同一ホスト上の 2つの minikube 間で通信できるようにしたい
タイトルにも記載していますが、お仕事で以下のような検証を実施したいというお話がありました。
- マルチ Kubernetes cluster 構成での検証を実施したい
- Kubernetes cluster 間で通信できるようにしたい
- ローカルの端末上で minikube を使ってお手軽に検証できるようにしたい (minikube に慣れてるので minikube でやりたい)
いろいろ模索してみた結果、先週リリースされた minikube v1.29.0 で追加されている --static-ip
を使うといい感じにできそうだったので、検証結果を備忘録として残します。
環境
今回は以下の環境/バージョンで検証しています。
- Ubuntu : 20.04 (WSL2)
- Docker : 20.10.22
- Minikube : 1.29.0 (Kubernetes 1.26.1)
概要
minikube の docker driver を使って以下のような構成の環境を構築しました。同一の Docker Network 上に 2つの minikube をコンテナとして起動するので、この 2つのコンテナ間で通信ができるようになります。
+--------------+ +--------------+ | minikube-1 | | minikube-2 | | (172.25.0.2) | | (172.25.0.3) | +------+-------+ +------+-------+ | | *--------+-------------------+---------* (Docker network: test-net)
環境構築
まず、Docker Network test-net
を作成します。subnet の値はお好みに合わせて適当なプライベートアドレスの範囲を指定します。
$ docker network create -d bridge test-net --subnet=172.25.0.0/24 --gateway=172.25.0.1
次に minikube-1
を test-net
上に作成します。この時 --static-ip
で minikube-1
のコンテナに割り当てられる IP 172.25.0.2
を明示的に指定します。
$ minikube start -p minikube-1 --network=test-net --driver=docker --static-ip=172.25.0.2
同様に、minikube-2
も test-net
上に作成します。こちらも同様に --static-ip
に minikube-2
のコンテナに割り当てられる IP 172.25.0.3
を指定します。
$ minikube start -p minikube-2 --network=test-net --driver=docker --static-ip=172.25.0.3
これで、以下のような感じの環境が構築できました。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e288888db363 gcr.io/k8s-minikube/kicbase:v0.0.37 "/usr/local/bin/entr…" 2 minutes ago Up 2 minutes 127.0.0.1:32787->22/tcp, 127.0.0.1:32786->2376/tcp, 127.0.0.1:32785->5000/tcp, 127.0.0.1:32784->8443/tcp, 127.0.0.1:32783->32443/tcp minikube-2 232e4710da78 gcr.io/k8s-minikube/kicbase:v0.0.37 "/usr/local/bin/entr…" 4 minutes ago Up 4 minutes 127.0.0.1:32782->22/tcp, 127.0.0.1:32781->2376/tcp, 127.0.0.1:32780->5000/tcp, 127.0.0.1:32779->8443/tcp, 127.0.0.1:32778->32443/tcp minikube-1
test-net
上に作成した 2つの minikube コンテナに、--static-ip
で指定した IP がそれぞれ割り当てられていることが確認できます。
$ docker network inspect test-net | jq .[].Containers { "232e4710da782e1dcf7bde6254c738f66ccdcf7b461c8e4ca168fd53b4bcb9a9": { "Name": "minikube-1", "EndpointID": "5a7c80d74ded5d850277ea72a0cea1db869a7811ba5f72b0737581bdf4a82889", "MacAddress": "02:42:ac:19:00:02", "IPv4Address": "172.25.0.2/24", "IPv6Address": "" }, "e288888db363fb7e982914f4f887281ece739718e7e9fa151c290d17551d666b": { "Name": "minikube-2", "EndpointID": "d662015b22ef9df77065d77ad0406c41ba0942e0365caa8c694924f2ab21af79", "MacAddress": "02:42:ac:19:00:03", "IPv4Address": "172.25.0.3/24", "IPv6Address": "" } }
$ minikube ip -p minikube-1 172.25.0.2
$ minikube ip -p minikube-2 172.25.0.3
動作確認
動作確認のために、minikube-1
上に NGINX の Pod と Service (type: NodePort) をデプロイし、minikube-2
上の Pod から HTTP リクエストが実行可能かを確認してみます。
まず、minikube-1
上に以下のマニフェストを使って NGINX の Pod と Service をデプロイします。Service の .spec.ports.nodePort
には 30080
を指定しておきます。
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 1 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-nginx labels: run: my-nginx spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30080 protocol: TCP selector: run: my-nginx
$ minikube profile minikube-1
$ kubectl apply -f ./nginx.yaml
$ kubectl get pod,svc NAME READY STATUS RESTARTS AGE pod/my-nginx-754c4d44b4-cwq6h 1/1 Running 0 56s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6m12s service/my-nginx NodePort 10.96.223.147 <none> 80:30080/TCP 56s
次に、minikube-2
上にクライアント用の Pod (curl を実行する Pod) を作成します。
$ minikube profile minikube-2
$ kubectl run client --image=yauritux/busybox-curl:latest -it --rm -- /bin/sh
作成した「minikube-2
上にあるクライアント用の Pod」から「minikube-1
上にある NGINX Pod」に (type: NodePort の Service を経由して) HTTP リクエストを実行してみます。minikube-1
の IP 172.25.0.2
と 30080
port を指定します。
/home # curl -IXGET http://172.25.0.2:30080/ HTTP/1.1 200 OK Server: nginx/1.23.3 Date: Thu, 02 Feb 2023 10:25:41 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT Connection: keep-alive ETag: "6398a011-267" Accept-Ranges: bytes
上記の通り、「minikube-2
上の Pod」から「minikube-1
上の NGINX Pod」に対して HTTP リクエストを実行できました。
また、Docker 側の機能でいい感じにコンテナ名の名前解決を実施してくれるので、IP ではなく minikube-1
をホスト名として指定しても HTTP リクエストを実行可能です。
/home # curl -IXGET http://minikube-1:30080/ HTTP/1.1 200 OK Server: nginx/1.23.3 Date: Thu, 02 Feb 2023 10:27:47 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT Connection: keep-alive ETag: "6398a011-267" Accept-Ranges: bytes
おまけ
--static-ip
を指定せずに 2つの minikube を起動しようとすると、IP がコンフリクトして以下のようなエラーが発生しました。そのため、--static-ip
が利用できない minikube v1.28.0 以前のバージョンでは上記方法 (同一 Docker Network 上に 2つの minikube を作成) は利用できないと思われます。
$ minikube start -p minikube-2 --network=test-net --driver=docker 😄 [minikube-2] minikube v1.29.0 on Ubuntu 20.04 ✨ Using the docker driver based on user configuration 📌 Using Docker driver with root privileges 👍 Starting control plane node minikube-2 in cluster minikube-2 🚜 Pulling base image ... 🔥 Creating docker container (CPUs=2, Memory=6300MB) ... ❌ Exiting due to GUEST_PROVISION: Failed to start host: can't create with that IP, address already in use ╭───────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ 😿 If the above advice does not help, please let us know: │ │ 👉 https://github.com/kubernetes/minikube/issues/new/choose │ │ │ │ Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue. │ │ │ ╰───────────────────────────────────────────────────────────────────────────────────────────╯
まとめ
minikube v1.29.0 で追加された --static-ip
を使うと、複数の minikube を 1つの Docker Network 上に (IP をコンフリクトさせることなく) 作成できました。ひとまず type: NodePort
で通信できるようにはなったので最低限の検証はできるのですが、NodePort
ではデフォルトだと 30000-32767
の範囲の番号の port を使う感じになるので、できれば type: LoadBalancer
とかでも Kubernetes 間の通信ができるようになると嬉しい気がします。
わりと手探りで模索した感じなので、他に良い方法を知ってる方がいたらコメントいただけると嬉しいです。
ScalarDB を使って Cassandra の Partition を跨いだ Tx を実行してみる
先日 NewSQL/分散SQLデータベース よろず勉強会 #1 にて「Cassandra で Partition を跨いだ Tx を実行できるようにする Accord というものが開発中である」というお話を聞いたのですが、「それって ScalarDB でもできるのでは?」ということでやってみました。
注意
このブログの内容は、あくまで個人の趣味の範囲で ScalarDB を使った検証を実施しているだけですので、あしからず。
また、サンプルとして記載しているコードではエラーハンドリング (エラー発生時の ROLLBACK 等) は考慮していません。実際に ScalarDB を使ってアプリを作る場合はそのあたりも考えないといけないので注意してください。ScalarDB でのエラーハンドリングについては Handle Exceptions に記載されているので、興味がある方はそちらもどうぞ。
環境
今回は以下の環境/バージョンで検証しています。
- Ubuntu : 20.04 (WSL2)
- OpenJDK : 17
- Docker : 20.10.21
- ScalarDB : 3.7.0
検証内容概要
以下のような感じで、ScalarDB を使って Cassandra 上の (複数パーティションを跨いだ) レコードを更新します。
+----------------------+ | Java App | | +------------------+ | +-------------+ | | Scalar DB |--------------------------------->| Backend DB | | +------------------+ | | (Cassandra) | +----------------------+ +-------------+
検証
それでは早速検証してみます。
Cassandra 起動
Docker を使って Cassandra を起動します。localhost
でアクセスするために -p 9042:9042
オプションを付けておきます。
$ docker run -d --name cassandra -p 9042:9042 cassandra:3.11.14
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 196d8d087453 cassandra:3.11.14 "docker-entrypoint.s…" 23 seconds ago Up 22 seconds 7000-7001/tcp, 7199/tcp, 9160/tcp, 0.0.0.0:9042->9042/tcp, :::9042->9042/tcp cassandra
テーブル作成
今回は以下のようなテーブル foo
をネームスペース ns
上に作成します。(実際に Cassandra 上に作成されるテーブルには ScalarDB 用のメタデータを格納するカラムも含まれます。)
+---------------------+------+ | columnName | type | +---------------------+------+ | pk (Partition Key) | INT | | ck (Clustering Key) | INT | | v | INT | +---------------------+------+
上記のようなテーブルを、ScalarDB の Administrative API を使って作成します。具体的なコードは以下の通りです。
package com.example; import java.util.Properties; import com.scalar.db.api.DistributedTransactionAdmin; import com.scalar.db.api.TableMetadata; import com.scalar.db.io.DataType; import com.scalar.db.service.TransactionFactory; import com.scalar.db.api.Scan; public class CreateSchemaOnCassandra { public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.setProperty("scalar.db.contact_points", "localhost"); properties.setProperty("scalar.db.contact_port", "9042"); properties.setProperty("scalar.db.storage", "cassandra"); properties.setProperty("scalar.db.username", "cassandra"); properties.setProperty("scalar.db.password", "cassandra"); TransactionFactory transactionFactory = TransactionFactory.create(properties); DistributedTransactionAdmin admin = transactionFactory.getTransactionAdmin(); boolean ifNotExist = true; // Create coordinator tables for ScalarDB admin.createCoordinatorTables(ifNotExist); // Create namespace admin.createNamespace("ns", ifNotExist); // Define a table metadata TableMetadata tableMetadata = TableMetadata.newBuilder() .addColumn("pk", DataType.INT) .addColumn("ck", DataType.TEXT) .addColumn("v", DataType.BIGINT) .addPartitionKey("pk") .addClusteringKey("ck", Scan.Ordering.Order.ASC) .build(); // Create table admin.createTable("ns", "foo", tableMetadata, ifNotExist); admin.close(); } }
Cassandra に cqlsh で接続し、作成されたテーブルの情報を直接参照すると以下のようになっています。ScalarDB 関連のメタデータを含むカラムも併せて定義されていますが、pk
が Partition Key、ck
が Clustering Key として定義されていることが確認できます。
$ docker exec -it cassandra cqlsh Connected to Test Cluster at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.11.14 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cqlsh> cqlsh> DESCRIBE TABLE ns.foo; CREATE TABLE ns.foo ( pk int, ck int, before_tx_committed_at bigint, before_tx_id text, before_tx_prepared_at bigint, before_tx_state int, before_tx_version int, before_v int, tx_committed_at bigint, tx_id text, tx_prepared_at bigint, tx_state int, tx_version int, v int, PRIMARY KEY (pk, ck) ) WITH CLUSTERING ORDER BY (ck ASC) AND bloom_filter_fp_chance = 0.01 AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} AND comment = '' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND crc_check_chance = 1.0 AND dclocal_read_repair_chance = 0.1 AND default_time_to_live = 0 AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99PERCENTILE'; cqlsh>
初期データの INSERT
検証用に以下のようなレコード (Partition Key が異なるレコード) を 2つ INSERT します。
+----+----+---+ | pk | ck | v | +----+----+---+ | 1 | 1 | 1 | | 2 | 2 | 2 | +----+----+---+
上記のようなデータを、ScalarDB の Transactional API を使って INSERT します (ScalarDB の API としては Put
を使います)。具体的なコードは以下の通りです。
package com.example; import java.util.Properties; import com.scalar.db.api.DistributedTransaction; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Put; import com.scalar.db.io.Key; import com.scalar.db.service.TransactionFactory; public class InsertRecordOnCassandra { public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.setProperty("scalar.db.contact_points", "localhost"); properties.setProperty("scalar.db.contact_port", "9042"); properties.setProperty("scalar.db.storage", "cassandra"); properties.setProperty("scalar.db.username", "cassandra"); properties.setProperty("scalar.db.password", "cassandra"); TransactionFactory transactionFactory = TransactionFactory.create(properties); DistributedTransactionManager manager = transactionFactory.getTransactionManager(); // Begin Tx DistributedTransaction transaction = manager.begin(); // INSERT INTO ns.foo (pk, ck, v) VALUES (1, 1, 1) Key partitionKey1 = Key.ofInt("pk", 1); Key clusteringKey1 = Key.ofInt("ck", 1); Put put1 = Put.newBuilder() .namespace("ns") .table("foo") .partitionKey(partitionKey1) .clusteringKey(clusteringKey1) .intValue("v", 1) .build(); transaction.put(put1); // INSERT INTO ns.foo (pk, ck, v) VALUES (2, 2, 2) Key partitionKey2 = Key.ofInt("pk", 2); Key clusteringKey2 = Key.ofInt("ck", 2); Put put2 = Put.newBuilder() .namespace("ns") .table("foo") .partitionKey(partitionKey2) .clusteringKey(clusteringKey2) .intValue("v", 2) .build(); transaction.put(put2); // Commit Tx transaction.commit(); manager.close(); } }
Cassandra に cqlsh で接続し、実際に格納されたレコードの内容を確認しておきます。Partition が異なる (Partition Key が異なる) レコードが 2つ INSERT されていることが確認できます。
cqlsh> SELECT pk, ck, v FROM ns.foo; pk | ck | v ----+----+--- 1 | 1 | 1 2 | 2 | 2 (2 rows)
実は、この時点でこの 2つのレコード (Partition が異なるレコード) は ScalarDB の Tx (同一の Tx) で INSERT されています。ScalarDB は Tx 用のメタデータをレコード内に保持する仕組みになっているため、Tx ID の情報を合わせて確認すると、「同じ Tx ID で (同じ Tx で) 2つのレコードが INSERT されている」ことが確認できます。
cqlsh> SELECT pk, ck, v, tx_id FROM ns.foo; pk | ck | v | tx_id ----+----+---+-------------------------------------- 1 | 1 | 1 | 53da60ca-5879-4e85-88d2-a7580d68e820 2 | 2 | 2 | 53da60ca-5879-4e85-88d2-a7580d68e820 (2 rows)
Partition を跨いだレコードの UPDATE
さて、INSERT の時点で ScalarDB を利用して「Cassandra の『Partition を跨いだ複数のレコード』を『同一 Tx』で更新」できることがほぼ確認できてしまいましたが、せっかくなので UPDATE も実行してみます。先ほど INSERT したレコードのカラム v
の値を以下のように UPDATE します。
+----+----+-----+ | pk | ck | v | +----+----+-----+ | 1 | 1 | 100 | | 2 | 2 | 200 | +----+----+-----+
上記のようなデータを、ScalarDB の Transactional API を使って UPDATE します (ScalarDB の API としては Put
を使います)。具体的なコードは以下の通りです。
※ScalarDB で既存のレコードを更新 (Put
) する場合は、一度対象となるレコードを参照 (Get
) する必要があります。このあたりの動作については こちらのスライド に記載されているので、興味がある方はこのスライドも参照してみてください。
package com.example; import java.util.Properties; import com.scalar.db.api.DistributedTransaction; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Get; import com.scalar.db.api.Put; import com.scalar.db.io.Key; import com.scalar.db.service.TransactionFactory; public class UpdateOnCassandra { public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.setProperty("scalar.db.contact_points", "localhost"); properties.setProperty("scalar.db.contact_port", "9042"); properties.setProperty("scalar.db.storage", "cassandra"); properties.setProperty("scalar.db.username", "cassandra"); properties.setProperty("scalar.db.password", "cassandra"); TransactionFactory transactionFactory = TransactionFactory.create(properties); DistributedTransactionManager manager = transactionFactory.getTransactionManager(); // Begin Tx DistributedTransaction transaction = manager.begin(); // UPDATE foo SET v = 100 WHERE pk = 1 AND ck = 1 Key partitionKey1 = Key.ofInt("pk", 1); Key clusteringKey1 = Key.ofInt("ck", 1); Get get1 = Get.newBuilder() .namespace("ns") .table("foo") .partitionKey(partitionKey1) .clusteringKey(clusteringKey1) .build(); transaction.get(get1); Put put1 = Put.newBuilder() .namespace("ns") .table("foo") .partitionKey(partitionKey1) .clusteringKey(clusteringKey1) .intValue("v", 100) .build(); transaction.put(put1); // UPDATE foo SET v = 200 WHERE pk = 2 AND ck = 2 Key partitionKey2 = Key.ofInt("pk", 2); Key clusteringKey2 = Key.ofInt("ck", 2); Get get2 = Get.newBuilder() .namespace("ns") .table("foo") .partitionKey(partitionKey2) .clusteringKey(clusteringKey2) .build(); transaction.get(get2); Put put2 = Put.newBuilder() .namespace("ns") .table("foo") .partitionKey(partitionKey2) .clusteringKey(clusteringKey2) .intValue("v", 200) .build(); transaction.put(put2); // Commit Tx transaction.commit(); manager.close(); } }
ScalarDB でレコードを UPDATE した後に、Cassandra に cqlsh で接続し、実際に格納されたレコードの内容を確認してみます。Tx ID の情報を合わせて確認すると、「同じ Tx ID で (同じ Tx で) Cassandra の Partition を跨いだ 2つのレコードが UPDATE されている」ことが確認できます。
cqlsh> SELECT pk, ck, v, tx_id FROM ns.foo; pk | ck | v | tx_id ----+----+-----+-------------------------------------- 1 | 1 | 100 | 67e1ed69-8bee-478d-b9e5-7fb6774e36b3 2 | 2 | 200 | 67e1ed69-8bee-478d-b9e5-7fb6774e36b3 (2 rows)
まとめ
ということで、ScalarDB を使うと「Cassandra 上の Partition が異なるレコードを 1つの Tx で UPDATE できる」ことが確認できました。このような感じで、ScalarDB を使うと NoSQL 上で ACID Transaction を実行できます。
なお、一貫性のある状態でレコードを参照 (SELECT) するためには ScalarDB を使って SELECT (ScalarDB の API としては Get
) する必要があります。今回は、同一 Tx (ID) で更新されていることを確認するために、Cassandra に直接接続してメタデータを含むレコードの情報を参照しましたが、この方法では参照時のデータの一貫性が担保されないので、実際に ScalarDB を使ってアプリを作成する場合はご注意ください。
Scalar DB on CockroachDB を試してみた
分散 Tx マネージャーである Scalar DB は Storage として複数の DB をサポート していますが、その中に PostgreSQL も含まれています。
PostgreSQL がサポートされているということは、Scalar DB と PostgreSQL が「PostgreSQL のプロトコルを使って通信している」ということです (具体的には JDBC ドライバを使っています)。
そして、PostgreSQL のプロトコルで通信しているということは、PostgreSQL とプロトコル互換のある CockroachDB でもいける可能性があるということです!!!
ということで、Scalar DB on CockroachDB を試してみました。
注意
前述した通り、Scalar DB にて PostgreSQL はサポート されていますが、CockroachDB はサポートされていない DB です。今回の内容はあくまで趣味の範囲で検証したものなので、あしからず。
環境
今回は以下の環境で検証しています。
バージョン
Ubuntu : 20.04
OpenJDK : 11
Docker : 20.10.12
Scalar DB : 3.5.0
CockroachDB : 21.2.5
Container Image (CockroachDB) : cockroachdb/cockroach
Scalar DB の使い方
Scalar DB には「Java のライブラリとして使う方法」と「gRPC サーバーとして使う方法」の 2種類があります。
- Pattern 1 (As a Java Library)
+----------------------+ | Java App | | +------------------+ | +----------------------+ | | Scalar DB |--------------------------------->| Backend DB | | +------------------+ | | (PostgreSQL etc...) | +----------------------+ +----------------------+
- Pattern 2 (As a gRPC Server)
+----------------------+ | App | | +------------------+ | +----------------------+ +----------------------+ | | Scalar DB Client |----->| Scalar DB Server |--->| Backend DB | | +------------------+ | | (gRPC Server) | | (PostgreSQL etc...) | +----------------------+ +----------------------+ +----------------------+
今回は「Java のライブラリとして使う」方で検証します。
CockroachDB の準備
最初に、Scalar DB の Storage として利用する CockroachDB を準備します。
クラスタ構築 (3匹構成)
本題からそれてしまうので構築方法の詳細は割愛しますが、今回は以下のような 3匹構成の CockroachDB クラスタ (Docker を利用したローカルの Secure クラスタ) を使います。cockroach-1 が 127.0.0.1:26257 でクライアントからの接続を LISTEN しているので、Scalar DB からはこの 127.0.0.1:26257 に接続します。
- コンテナ
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f1726fd20c6d cockroachdb/cockroach:v21.2.5 "/cockroach/cockroac…" 46 minutes ago Up 46 minutes 26257/tcp, 127.0.0.1:8083->8080/tcp cockroach-3 be0584fde8e6 cockroachdb/cockroach:v21.2.5 "/cockroach/cockroac…" 46 minutes ago Up 46 minutes 26257/tcp, 127.0.0.1:8082->8080/tcp cockroach-2 37d8c9c42790 cockroachdb/cockroach:v21.2.5 "/cockroach/cockroac…" 46 minutes ago Up 46 minutes 127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp cockroach-1 7e918c6d4e29 cockroachdb/cockroach:v21.2.5 "tail -f /dev/null" 46 minutes ago Up 46 minutes 8080/tcp, 26257/tcp cockroach-client
※cockroach-client は sql shell を実行するためのクライアント用コンテナ。
- クラスタ情報
id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live -----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+---------- 1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.5 | 2022-02-23 00:53:26.41591 | 2022-02-23 00:53:26.483088 | region=region-1,zone=zone-a | true | true 2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.5 | 2022-02-23 00:53:27.073393 | 2022-02-23 00:53:27.149113 | region=region-1,zone=zone-b | true | true 3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.5 | 2022-02-23 00:53:27.527108 | 2022-02-23 00:53:27.602613 | region=region-1,zone=zone-c | true | true
DB 作成
CockroachDB 側で Scalar DB が利用する DB (db0) を作成します。
- DB 作成
$ docker exec -it cockroach-client ./cockroach sql --user=root --certs-dir=certs --host=cockroach-1:26257 # # Welcome to the CockroachDB SQL shell. # All statements must be terminated by a semicolon. # To exit, type: \q. # # Server version: CockroachDB CCL v21.2.5 (x86_64-unknown-linux-gnu, built 2022/02/07 21:01:07, go1.16.6) (same version as client) # Cluster ID: e3e484e2-8026-4bc5-8a6f-15ff7a764e9f # # Enter \? for a brief introduction. # root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> CREATE DATABASE db0; CREATE DATABASE Time: 37ms total (execution 37ms / network 0ms) root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> SHOW DATABASES; database_name | owner | primary_region | regions | survival_goal ----------------+-------+----------------+---------+---------------- db0 | root | NULL | {} | NULL defaultdb | root | NULL | {} | NULL intro | root | NULL | {} | NULL postgres | root | NULL | {} | NULL system | node | NULL | {} | NULL (5 rows) Time: 4ms total (execution 4ms / network 0ms) root@cockroach-1:26257/defaultdb>
ユーザー作成
Scalar DB が CockroachDB にアクセスする際のユーザー (scalar) を作成します。今回はパスワード認証でアクセスするため、パスワードも併せて設定しておきます。また、今回は scalar ユーザーに db0 に対するフルアクセスの権限をざっくりと付与しておきます。
- ユーザー作成
root@cockroach-1:26257/defaultdb> CREATE USER scalar WITH PASSWORD 'xxxxxxxx'; CREATE ROLE Time: 250ms total (execution 249ms / network 0ms) root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> GRANT ALL ON DATABASE db0 TO scalar; GRANT Time: 105ms total (execution 104ms / network 0ms) root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> SHOW USERS; username | options | member_of ------------+---------+------------ admin | | {} cockroach | | {} root | | {admin} scalar | | {} (4 rows) Time: 9ms total (execution 8ms / network 0ms) root@cockroach-1:26257/defaultdb>
これで、CockroachDB 側での準備は完了です。実際は TABLE 作成も必要ですが、Scalar DB で使う TABLE は Scalar DB 側のツールを使って作成します。
Scalar DB の準備
次に、Scalar DB 側の準備を行います。
設定ファイル作成
まずは、Scalar DB や Schema Loader から CockroachDB に接続するための設定ファイル (database.properties) を準備します。今回は、必要最低限の設定として「JDBC での接続情報」「ユーザー/パスワード」のみ設定します。
この設定ファイル内で、CockroachDB コンテナが LISTEN している 127.0.0.1:26257 と、CockroachDB 側で作成した DB (db0) を指定しています。
- database.properties
# Use PostgreSQL (JDBC Database) scalar.db.storage=jdbc # JDBC URL scalar.db.contact_points=jdbc:postgresql://127.0.0.1:26257/db0 # User and Password scalar.db.username=scalar scalar.db.password=xxxxxxxx
TABLE 作成
次に、テスト用の TABLE を作成します。(分散 Tx マネージャーである) Scalar DB では、クライアント側 (Scalar DB 側 ) で分散 Tx を実現するために Distributed WAL と呼ばれるメタデータをレコード (TABLE) 内に保持する仕組みになっています。
そのため、TABLE を作成する際は Distributed WAL を格納するためのカラムも一緒に定義する必要がありますが、Schema Loader というツールを使うといい感じに TABLE を作成してくれます。
まずは、GitHub Releases から Schema Loader をダウンロードします。
- Schema Loader をダウンロード
$ curl -OL https://github.com/scalar-labs/scalardb/releases/download/v3.5.0/scalardb-schema-loader-3.5.0.jar $ ls -l scalardb-schema-loader-3.5.0.jar -rw-rw-r-- 1 ubuntu ubuntu 60464284 Feb 23 11:33 scalardb-schema-loader-3.5.0.jar
そして、作成する TABLE の情報を JSON 形式で用意します。
- test-schema.json
{ "s0.t0": { "transaction": true, "partition-key": [ "id" ], "clustering-key": [], "columns": { "id": "INT", "c0": "INT" } } }
今回は「"s0" スキーマ」内に「"t0" テーブル」を作成し、「id (int/primary key)」「c0 (int)」という 2つのカラムを定義します。要するに、通常の DDL だと以下のような感じの操作をしているイメージです。
- DDL のイメージ
CREATE SCHEMA s0; CREATE TABLE s0.t0 (id INT PRIMARY KEY, c0 INT);
用意した JSON ファイル (test-schema.json) を指定して Schema Loader を実行します。この時、事前に用意した database.properties ファイル (CockroachDB に JDBC で接続するための情報を記載した設定ファイル) も指定します。
- Schema Loader 実行
$ java -jar ./scalardb-schema-loader-3.5.0.jar --config ./database.properties -f ./test-schema.json --coordinator [main] INFO com.scalar.db.schemaloader.command.SchemaLoaderCommand - Config path: ./database.properties [main] INFO com.scalar.db.schemaloader.command.SchemaLoaderCommand - Schema path: ./test-schema.json [main] INFO com.scalar.db.schemaloader.SchemaOperator - Creating the table t0 in the namespace s0 succeeded. [main] INFO com.scalar.db.schemaloader.SchemaOperator - Creating the coordinator table succeeded.
これで TABLE 作成は完了です。試しに、直接 CockroachDB に接続して確認してみると、以下のような TABLE が作成されていることが確認できます。
- TABLE 定義
root@cockroach-1:26257/db0> SHOW COLUMNS FROM s0.t0; column_name | data_type | is_nullable | column_default | generation_expression | indices | is_hidden -------------------------+-----------+-------------+----------------+-----------------------+-----------+------------ id | INT8 | false | NULL | | {primary} | false c0 | INT8 | true | NULL | | {primary} | false tx_id | STRING | true | NULL | | {primary} | false tx_state | INT8 | true | NULL | | {primary} | false tx_version | INT8 | true | NULL | | {primary} | false tx_prepared_at | INT8 | true | NULL | | {primary} | false tx_committed_at | INT8 | true | NULL | | {primary} | false before_tx_id | STRING | true | NULL | | {primary} | false before_tx_state | INT8 | true | NULL | | {primary} | false before_tx_version | INT8 | true | NULL | | {primary} | false before_tx_prepared_at | INT8 | true | NULL | | {primary} | false before_tx_committed_at | INT8 | true | NULL | | {primary} | false before_c0 | INT8 | true | NULL | | {primary} | false (13 rows)
また、実際には Scalar DB 側で分散 Tx 等を管理するために必要なメタデータを格納する TABLE (scalardb.metadata / coordinator.state) も作成されていることが確認できます。
- 作成された TABLE 一覧
root@cockroach-1:26257/db0> SHOW TABLES; schema_name | table_name | type | owner | estimated_row_count | locality --------------+------------+-------+--------+---------------------+----------- coordinator | state | table | scalar | 0 | NULL s0 | t0 | table | scalar | 0 | NULL scalardb | metadata | table | scalar | 18 | NULL (3 rows)
これで、Scalar DB 側の事前準備も完了です。
Scalar DB を使った CRUD
ということで、Scalar DB を使った CRUD 操作を実施してみようと思います。
が、現状 Scalar DB に SQL クライアントのようなツールはなく、今回は前述した通り Scalar DB を Java のライブラリとして利用するので、まずは CRUD 操作を実行するための Java App を用意します。
Scalar DB のダウンロード
GitHub から clone してきて build する方法もあるのですが、Scalar DB は Maven Central で公開されているので、今回はそこからダウンロードしてきます。
Java App の作成
今回は以下の 3 のプログラムで CRUD 操作を実行します。各コード内で先ほど準備した database.properties を読み込んで CockroachDB に JDBC で接続しています。
- Write.java (Create / Update)
package com.example; import java.io.File; import java.io.IOException; import com.scalar.db.api.DistributedTransaction; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Get; import com.scalar.db.api.Put; import com.scalar.db.config.DatabaseConfig; import com.scalar.db.exception.transaction.TransactionException; import com.scalar.db.io.Key; import com.scalar.db.service.TransactionFactory; public class Write { public static void main(String[] args) throws TransactionException, IOException { TransactionFactory factory = new TransactionFactory(new DatabaseConfig(new File("./database.properties"))); DistributedTransactionManager manager = factory.getTransactionManager(); manager.with("s0", "t0"); DistributedTransaction tx = manager.start(); int id = Integer.parseInt(args[0]); int value = Integer.parseInt(args[1]); try { Get get = new Get(new Key("id", id)); tx.get(get); Put put = new Put(new Key("id", id)).withValue("c0", value); tx.put(put); tx.commit(); } catch (Exception e) { tx.abort(); throw e; } } }
- Read.java (Read)
package com.example; import java.io.File; import java.io.IOException; import java.util.Optional; import com.scalar.db.api.DistributedTransaction; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Get; import com.scalar.db.api.Result; import com.scalar.db.config.DatabaseConfig; import com.scalar.db.exception.transaction.TransactionException; import com.scalar.db.io.Key; import com.scalar.db.service.TransactionFactory; public class Read { public static void main(String[] args) throws TransactionException, IOException { TransactionFactory factory = new TransactionFactory(new DatabaseConfig(new File("./database.properties"))); DistributedTransactionManager manager = factory.getTransactionManager(); manager.with("s0", "t0"); DistributedTransaction tx = manager.start(); int id = Integer.parseInt(args[0]); try { Get get = new Get(new Key("id", id)); Optional<Result> result = tx.get(get); tx.commit(); if (result.isPresent()) { int value = result.get().getValue("c0").get().getAsInt(); System.out.println("id: " + id); System.out.println("c0: " + value); } else { System.out.println("\"id = " + id + "\" does not exist"); } } catch (Exception e) { tx.abort(); throw e; } } }
- Remove.java (Delete)
package com.example; import java.io.File; import java.io.IOException; import com.scalar.db.api.Delete; import com.scalar.db.api.DistributedTransaction; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Get; import com.scalar.db.config.DatabaseConfig; import com.scalar.db.exception.transaction.TransactionException; import com.scalar.db.io.Key; import com.scalar.db.service.TransactionFactory; public class Remove { public static void main(String[] args) throws TransactionException, IOException{ TransactionFactory factory = new TransactionFactory(new DatabaseConfig((new File("./database.properties")))); DistributedTransactionManager manager = factory.getTransactionManager(); manager.with("s0", "t0"); DistributedTransaction tx = manager.start(); int id = Integer.parseInt(args[0]); try { Get get = new Get(new Key("id", id)); tx.get(get); Delete del = new Delete(new Key("id", id)); tx.delete(del); tx.commit(); } catch (Exception e) { tx.abort(); throw e; } } }
ちなみに、今回は例外処理をサボっていますが、「分散 Tx を実行する」だけあって、実際はいろんなパターンのエラーを想定した複数の例外処理を実施する必要があります。(検証用のコードでそこまでガッツリ例外処理する元気はありませんでした...)
興味がある方は A Guide on How to Handle Exceptions や Trouble-shooting Guilde を参照してみてください。
App を実行
では、用意した各 App を実行してみます。
Create
まずは Create です。t0 TABLE に対して id = 1 / c0 = 100 のレコードを INSERT します。
- Create
$ java -cp ./lib/*: com.example.Write 1 100
App 実行後、CockroachDB 側で直接確認すると、以下のようにレコードが INSERT されていることが確認できます。
- CockroachDB 側で確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0; id | c0 -----+------ 1 | 100 (1 row)
Read
次に Read です。先ほど書き込んだ id = 1 / c0 = 100 のレコードを Scalar DB 経由で SELECT してみます。
- Read
$ java -cp ./lib/*: com.example.Read 1 id: 1 c0: 100
Update
次は Update です。先ほど書き込んだ id = 1 / c0 = 100 のレコードの c0 の値を 200 に UPDATE してみます。(※Create/INSERT と同じものを利用します。)
- Update
$ java -cp ./lib/*: com.example.Write 1 200
App 実行後、Scalar DB 経由で SELECT してみると、値が更新されていることが確認できます。
- Read (Update 後の確認)
$ java -cp ./lib/*: com.example.Read 1 id: 1 c0: 200
また、CockroachDB 側で直接 SELECT すると、値が UPDATE されていることが確認できます。
- CockroachDB 側で UPDATE された値を確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0; id | c0 -----+------ 1 | 200 (1 row)
Delete
最後に Delete です。先ほど書き込んだ id = 1 のレコードを DELETE してみます。
- Delete
$ java -cp ./lib/*: com.example.Remove 1
App 実行後、Scalar DB 経由で SELECT してみると、id = 1 のレコードが削除されていることが確認できます。
- Read (Delete 後の確認)
$ java -cp ./lib/*: com.example.Read 1 "id = 1" does not exist
また、CockroachDB 側で直接 SELECT すると、レコードが DELETE されていることが確認できます。
- CockroachDB 側で DELETE されたことを確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0; id | c0 -----+----- (0 rows)
まとめ
ということで、とりあえず Scalar DB on CockroachDB でシンプルな CRUD 操作は実行できました。(繰り返しになりますが、公式にサポートされている訳ではないのであしからず...)
なお、CockroachDB にアクセスする云々の前に Java 周りで (サンプル App の作成で) しこたま躓いたのは内緒です。
CockroachDB に「禰󠄀」を INSERT
TL に「DB に『禰󠄀』を INSERT した際の異体字セレクタ」の話題が流れてきたので、CockroachDB で試してみました。
環境
今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。
バージョン
Ubuntu : 20.04
Docker : 20.10.12
CockroachDB : 21.2.4
Container Image : cockroachdb/cockroach
クラスタ (3匹構成)
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3a847c27d48 cockroachdb/cockroach:v21.2.4 "/cockroach/cockroac…" 11 minutes ago Up 11 minutes 26257/tcp, 127.0.0.1:8083->8080/tcp cockroach-3 7c6036d2172d cockroachdb/cockroach:v21.2.4 "/cockroach/cockroac…" 11 minutes ago Up 11 minutes 26257/tcp, 127.0.0.1:8082->8080/tcp cockroach-2 b8a80a6847e3 cockroachdb/cockroach:v21.2.4 "/cockroach/cockroac…" 11 minutes ago Up 11 minutes 127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp cockroach-1 5f5ea7063316 cockroachdb/cockroach:v21.2.4 "tail -f /dev/null" 11 minutes ago Up 11 minutes 8080/tcp, 26257/tcp cockroach-client
※cockroach-client は sql shell を実行するためのクライアント用コンテナ。
$ docker exec -it cockroach-client bash [root@cockroach-client cockroach]# [root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1 id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live -----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+---------- 1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.4 | 2022-02-06 11:01:14.758259 | 2022-02-06 11:13:37.299944 | region=region-1,zone=zone-a | true | true 2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.4 | 2022-02-06 11:01:15.701614 | 2022-02-06 11:13:38.253956 | region=region-1,zone=zone-b | true | true 3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.4 | 2022-02-06 11:01:16.204495 | 2022-02-06 11:13:38.742721 | region=region-1,zone=zone-c | true | true (3 rows)
「禰󠄀」を INSERT
root@cockroach-1:26257/defaultdb> CREATE TABLE t0 (c0 STRING); CREATE TABLE Time: 74ms total (execution 73ms / network 0ms) root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> INSERT INTO t0 VALUES ('竈門禰豆子'); INSERT 1 Time: 16ms total (execution 16ms / network 0ms) root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> SELECT * FROM t0; c0 --------------- 竈門禰󠄀豆子 (1 row) Time: 2ms total (execution 1ms / network 0ms)
特に問題なく INSERT / SELECT できました。
CockroachDB の文字コード関連の設定
CREATE DATABASE のページを見ると、CockroachDB の encoding
の設定は UTF-8 のみサポートされる旨の記載がありましたが、扱えるバイト数等の情報は確認できませんでした。
- ドキュメント抜粋
The CREATE DATABASE statement accepts an optional ENCODING clause for compatibility with PostgreSQL, but UTF-8 is the only supported encoding. The aliases UTF8 and UNICODE are also accepted. Values should be enclosed in single quotes and are case-insensitive.
また、SET (session variable) のページに server_encoding
/ client_encoding
の設定の記載がありますが、ORM との互換性を保つために用意されている設定項目のようであり、CockroachDB 自体の文字 (文字コード) の扱いには影響しなさそうな雰囲気でした。
ドキュメント抜粋
Variable name Description Initial value Modify with SET
?client_encoding
(Reserved; exposed only for ORM compatibility.) UTF8
No server_encoding
(Reserved; exposed only for ORM compatibility.) UTF8
Yes
まとめ
特に問題なく「禰󠄀」を INSERT できました。
ただ、ターミナルで「禰」と表示されたり「禰󠄀」と表示されたりする理由がよく分かりませんでした...
株式会社 Scalar に入社しました
2021/12/31 付けで約 9年弱勤めた前職を退職し、2022/01/01 から 株式会社 Scalar でお仕事をさせてもらうことになりました。大きな節目であり、せっかくなので、入社エントリを残しておこうと思います。
Scalar はどんな会社なのか
Scalar (Twitter: @Scalar_labs) は、「THE WORLD'S RELIABLE DATABASE」をビジョンとして掲げ、分散 DB (分散 Tx マネージャー) である Scalar DB と分散型台帳である Scalar DL という 2つのプロダクトを中心に、DB 関連のプロダクトの研究開発を行なっている会社です。
また、Scalar DB は OSS (Apache License 2.0) で公開されており、Scalar DL は商用ライセンスでのみ提供されています。
- Scalar DB (Apache License 2.0)
- Scalar DL (Commercial License only)
私も絶賛勉強中なので、各プロダクトの概要については以下のホームページをご覧ください。しばらくしたら (OSS である Scalar DB を中心に) プライベートでもアウトプットしていきたいなぁと思ったりしてます (思ってるだけ) 。
転職した経緯/理由
私の今までのキャリアとしては、いわゆる「サポートエンジニア」のキャリアが長い状況で、PostgreSQL / NGINX / Linux あたりを中心にした OSS のサポート (特に PostgreSQL のサポート経験が長い) やパブリッククラウドのサポートをやってきました。DB を好きになったのも、PostgreSQL のサポートをしていた部分が大きいと思います。
また、少しだけ SI プロジェクトにも参加したことがありましたが、上記の通りサポート歴が長く、「何かを作る」という経験が少なかったため、(特に転職活動はしていなかったのですが) 漠然と「エンジニアとして何か (サービスやプロダクト) を "作る" 仕事がしてみたい」と思っていました。
そのような状況で Scalar から声をかけていただいたのですが、上記の通りサポートの仕事が長く開発系の仕事はほとんど経験がなかったので、最初は「自分のスキルセットではマッチしないのでは」とかなり及び腰になっていました。
しかし、分散 DB である Scalar DB というプロダクト自体や、分散 DB の研究開発をしているという Scalar の業務内容にはかなり興味があったので、一度お話を聞かせていただくことにしました。
その中で、「私のスキルセットでは合わない気がするのですが...」という部分も正直に伝えた上で、会社のことやプロダクトのことについていろいろとお話させていただくことができました。スタートアップで働くことも初であり不安もあったのですが、最終的に 5回ほど面談の場を設けていただき、私が不安に思っている部分や疑問点について事前にしっかりお話させていただけたことが安心材料になりました。
また、技術的な部分としては、個人的に「DB が好き」ということもあるのですが、マイクロサービスにおける複数サービス (各サービスが使っている複数の DB) 間で一貫性のある更新を可能にする Scalar DB はとても興味深いものでした。当時 (今もですが) CockroachDB を通して「分散 Tx」等にも興味を持っていた私には、かなり「刺さる」プロダクトでした。
加えて、(正直に言うと当初は名前すら知らなかったのですが) 契約書等の様々な重要な書類 (従来紙だったもの等) の電子化が進み「電子データの信頼性」がより重要になってきている昨今の状況において、DB 自体に改ざん検知機能をもたせる (DB 自体にデータの信頼性を高める機能をもたせる) Scalar DL というプロダクトについても、とても興味深いものでした。
更に、両プロダクト共に「水平スケール (スケールアウト) できる」という部分もとても魅力的であり、それぞれのプロダクトが今後活躍できそう (需要がありそう) と思った部分も決め手の 1つでした。
正直なところ前職はとても居心地の良い会社だったため、転職するか否か最後まで悩んだのですが、「自分が好きな DB という技術分野で仕事ができる」「やってみたかった "作る" 仕事ができる」「プロダクトが魅力的」という部分が勝り、転職を決断した次第です。
Scalar でやること
Scalar での私の当面のミッションの 1つ目は「各プロダクトのサポート (主に技術面でのサポート)」です。前述した通り、サポートエンジニアとしてのキャリアが一番長いので、まずはそのあたりをスキルを活かして貢献していけるように頑張っていこうと思います。
そして、2つ目のミッションは「クラウド/Kubernetes 環境へのデプロイを容易にする」ことです。いわゆる「クラウドネイティブ化を推進する」という感じでしょうか。主に以下の 2つのリポジトリを中心に活動していく予定になっており、この部分が私が挑戦したかった「何かを作る」部分になってくると思います。
技術コミュニティのみなさまへ
実は、今回の転職は以前参加していた Database Internals 輪読会 での繋がりがきっかけでご縁をいただくことができた次第となっています。また、Cloud Native Database Meetup で私がアウトプットした内容も見ていただいた上で、面談でいろいろなお話をさせていただくことができました。
更に、上記のようなコミュニティでのアウトプットにおける私の「第一歩」は Cloud Native Developers JP での LT でした (めちゃくちゃ緊張してたので当時どんな感じでお話をしたか覚えてません...w)。技術コミュニティへの参加やアウトプットの機会が無ければ Scalar に巡り会うことはできなかったと思います。
上記コミュニティを含め、今まで参加させていただいた各コミュニティの運営/関係者/参加者のみなさま、本当にありがとうございました。これからも DB 界隈や Cloud Native 界隈を中心に技術コミュニティでわいわいしていきたいと思いますので、今後もよろしくお願いします!
まとめ
ということで、2022 年は心機一転、Scalar で新しいことにチャレンジしていきたいと思います。正直なところ、まだ不安な部分 (主に自分のスキルでどこまで貢献できるのかという部分) もあるのですが、自分が好きな DB や Kubernetes に関わる仕事ができるので、テンションは上がっています。
前職のみなさま、長い間ほんとうにお世話になりました。最後にご挨拶させていただいた際、みなさま明るく前向きに送り出していただいたこと、本当に感謝しています。ありがとうございました。
Scalar のみなさま、まだまだ未熟な部分もありますが、少しでもお役に立てるよう頑張っていきたいと思いますので、よろしくお願いします!
We are hiring!
入社エントリでよくあるやつです!(一度自分で書いてみたかった)
Scalar では、DB が好きなメンバーを絶賛募集中です!
等々、一緒に働く仲間を全方位募集中ですので、興味がある方は是非以下のサイトをご覧ください!
CockroachDB に 1レコード INSERT した時にアクセスされるファイルのお話
最近話題 (?) の「DB に 1レコード INSERT した時にアクセスされるファイル」について、CockroachDB で検証してみました。
元ネタ
元ネタは以下の Blog です。
MySQLエキスパートyoku0825が目指す、DBAとしての未来像
「インストールされたばかりのMySQLがあるとして、特定テーブルに1件のレコードを最初にINSERTした場合、アクセスが発生するファイルとその理由をすべて教えてください」
カジュアルとはいえ、面談で急にこれを聞かれたらテンパる自信が有ります。
環境
今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。
バージョン
Ubuntu : 20.04
Docker : 20.10.8
CockroachDB : 21.1.7
Container Image : cockroachdb/cockroach
クラスタ (3匹構成)
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 605c2a704bbd cockroachdb/cockroach:v21.1.7 "/cockroach/cockroac…" 15 seconds ago Up 14 seconds 26257/tcp, 127.0.0.1:8083->8080/tcp cockroach-3 054a35a7586a cockroachdb/cockroach:v21.1.7 "/cockroach/cockroac…" 18 seconds ago Up 18 seconds 26257/tcp, 127.0.0.1:8082->8080/tcp cockroach-2 dc9c30a61132 cockroachdb/cockroach:v21.1.7 "/cockroach/cockroac…" 23 seconds ago Up 23 seconds 127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp cockroach-1 d75bfcddf87c cockroachdb/cockroach:v21.1.7 "tail -f /dev/null" 26 seconds ago Up 25 seconds 8080/tcp, 26257/tcp cockroach-client
※cockroach-client は sql shell を実行するためのクライアント用コンテナ。
$ sudo docker exec -it cockroach-client bash [root@cockroach-client cockroach]# [root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1 id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live -----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+---------- 1 | cockroach-1:26257 | cockroach-1:26257 | v21.1.7 | 2021-08-28 06:19:05.168392 | 2021-08-28 06:19:59.219781 | region=region-1,zone=zone-a | true | true 2 | cockroach-2:26257 | cockroach-2:26257 | v21.1.7 | 2021-08-28 06:19:08.95911 | 2021-08-28 06:19:58.486166 | region=region-1,zone=zone-b | true | true 3 | cockroach-3:26257 | cockroach-3:26257 | v21.1.7 | 2021-08-28 06:19:12.531782 | 2021-08-28 06:19:57.557849 | region=region-1,zone=zone-c | true | true (3 rows)
CockroachDB では、cockroach start コマンドでの起動時に "-s (--store)" オプションで指定したディレクトリの中に、DB や TABLE に関連するファイル (実データ) が格納されるため、このオプションに指定したディレクトリ配下のファイルアクセスを調べます。
また、コンテナ起動時に (docker の) "-v" オプションでホスト側のディレクトリをコンテナにマウントさせているので、ファイルアクセスについては Docker ホスト側から inotifywait コマンドを使って調べています。
TABLE 作成
最初に、検証に利用する TABLE を作成しておきます。
[root@cockroach-client cockroach]# cockroach sql --certs-dir=certs --host=cockroach-1 # # Welcome to the CockroachDB SQL shell. # All statements must be terminated by a semicolon. # To exit, type: \q. # # Server version: CockroachDB CCL v21.1.7 (x86_64-unknown-linux-gnu, built 2021/08/09 17:55:28, go1.15.14) (same version as client) # Cluster ID: e77ad798-d3bc-4bd3-91a8-960c3e7549ce # # Enter \? for a brief introduction. # root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> CREATE TABLE t1 (c1 INT, c2 STRING); CREATE TABLE Time: 75ms total (execution 75ms / network 0ms) root@cockroach-1:26257/defaultdb> root@cockroach-1:26257/defaultdb> SHOW COLUMNS FROM t1; column_name | data_type | is_nullable | column_default | generation_expression | indices | is_hidden --------------+-----------+-------------+----------------+-----------------------+-----------+------------ c1 | INT8 | true | NULL | | {} | false c2 | STRING | true | NULL | | {} | false rowid | INT8 | false | unique_rowid() | | {primary} | true (3 rows) Time: 53ms total (execution 53ms / network 0ms) root@cockroach-1:26257/defaultdb>
また、この TABLE の Leaseholder (Raft Leader) を確認しておきます。
root@cockroach-1:26257/defaultdb> SELECT database_name, table_name, replicas, lease_holder FROM crdb_internal.ranges WHERE table_name = 't1'; database_name | table_name | replicas | lease_holder ----------------+------------+----------+--------------- defaultdb | t1 | {1,2,3} | 1 (1 row) Time: 14ms total (execution 13ms / network 0ms)
今回の場合、Node ID 1 (cockroach-1) が Leaseholder (Raft の Leader)、Node ID 2/Node ID 3 (cockroach-2/cockroach-3) が replica (Raft の follower) になっているようです。
本命の前に (定期的にアクセスされるファイル)
今回は「1レコード INSERT した時にアクセスされるファイル」を調べたいのですが、どうやら CockroachDB では「何もしなくても定期的にファイルアクセスが発生」しているようです (推測ですが、恐らく Raft 関連の処理や Web UI で確認できるメトリクスを保存する処理に起因してファイルアクセスが発生していると思われます)。
なので、まずは何もしてなくても定期的にアクセスされているファイルを確認しておきます (とりあえず 3分ほどファイルアクセスを確認します)。
Leaseholder (cockroach-1) で確認
# time inotifywait -mr --format '%w%f : %e' ./cockroach-1/ > file_access_cockroach-1 Setting up watches. Beware: since -r was given, this may take a while! Watches established. ^C real 3m14.764s user 0m0.032s sys 0m0.070s
cockroach-1 がアクセスしているファイル
# sort ./file_access_cockroach-1 | uniq -c 53 ./cockroach-1/ : ACCESS,ISDIR 41 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/ : OPEN,ISDIR 1704 ./cockroach-1/000011.log : MODIFY 82 ./cockroach-1/auxiliary : ACCESS,ISDIR 41 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/auxiliary : OPEN,ISDIR 82 ./cockroach-1/auxiliary/ : ACCESS,ISDIR 41 ./cockroach-1/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/auxiliary/ : OPEN,ISDIR 82 ./cockroach-1/cockroach-temp755268128 : ACCESS,ISDIR 41 ./cockroach-1/cockroach-temp755268128 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/cockroach-temp755268128 : OPEN,ISDIR 82 ./cockroach-1/cockroach-temp755268128/ : ACCESS,ISDIR 41 ./cockroach-1/cockroach-temp755268128/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/cockroach-temp755268128/ : OPEN,ISDIR 82 ./cockroach-1/cockroach-temp755268128/auxiliary : ACCESS,ISDIR 41 ./cockroach-1/cockroach-temp755268128/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/cockroach-temp755268128/auxiliary : OPEN,ISDIR 82 ./cockroach-1/cockroach-temp755268128/auxiliary/ : ACCESS,ISDIR 41 ./cockroach-1/cockroach-temp755268128/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/cockroach-temp755268128/auxiliary/ : OPEN,ISDIR 82 ./cockroach-1/logs : ACCESS,ISDIR 41 ./cockroach-1/logs : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/logs : OPEN,ISDIR 82 ./cockroach-1/logs/ : ACCESS,ISDIR 41 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/logs/ : OPEN,ISDIR 19 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY 82 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR 41 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/logs/goroutine_dump : OPEN,ISDIR 82 ./cockroach-1/logs/goroutine_dump/ : ACCESS,ISDIR 41 ./cockroach-1/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/logs/goroutine_dump/ : OPEN,ISDIR 82 ./cockroach-1/logs/heap_profiler : ACCESS,ISDIR 41 ./cockroach-1/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/logs/heap_profiler : OPEN,ISDIR 82 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR 41 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR
replica (cockroach-2) で確認
# time inotifywait -mr --format '%w%f : %e' ./cockroach-2/ > file_access_cockroach-2 Setting up watches. Beware: since -r was given, this may take a while! Watches established. ^C real 3m15.499s user 0m0.073s sys 0m0.092s
cockroach-2 がアクセスしているファイル
# sort ./file_access_cockroach-2 | uniq -c 55 ./cockroach-2/ : ACCESS,ISDIR 41 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/ : OPEN,ISDIR 1694 ./cockroach-2/000378.log : MODIFY 82 ./cockroach-2/auxiliary : ACCESS,ISDIR 41 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary : OPEN,ISDIR 82 ./cockroach-2/auxiliary/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/1 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/1 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/1/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/10 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/10 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/10/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/11 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/11 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/11/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/12 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/12 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/12/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/13 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/13 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/13/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/14 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/14 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/14/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/15 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/15 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/15/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/16 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/16 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/16/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/17 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/17 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/17/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/18 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/18 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/18/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/19 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/19 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/19/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/2 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/2 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/2/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/20 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/20 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/20/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/21 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/21 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/21/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/22 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/22 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/22/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/23 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/23 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/23/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/24 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/24 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/24/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/25 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/25 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/25/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/26 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/26 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/26/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/27 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/27 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/27/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/28 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/28 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/28/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/29 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/29 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/29/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/3 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/3 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/3/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/30 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/30 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/30/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/31 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/31 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/31/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/32 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/32 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/32/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/33 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/33 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/33/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/34 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/34 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/34/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/35 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/35 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/35/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/36 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/36 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/36/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/4 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/4 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/4/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/5 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/5 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/5/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/6 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/6 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/6/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/7 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/7 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/7/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/8 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/8 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/8/ : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/9 : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/9 : OPEN,ISDIR 82 ./cockroach-2/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/auxiliary/sstsnapshot/9/ : OPEN,ISDIR 82 ./cockroach-2/cockroach-temp575432717 : ACCESS,ISDIR 41 ./cockroach-2/cockroach-temp575432717 : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/cockroach-temp575432717 : OPEN,ISDIR 82 ./cockroach-2/cockroach-temp575432717/ : ACCESS,ISDIR 41 ./cockroach-2/cockroach-temp575432717/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/cockroach-temp575432717/ : OPEN,ISDIR 83 ./cockroach-2/cockroach-temp575432717/auxiliary : ACCESS,ISDIR 41 ./cockroach-2/cockroach-temp575432717/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/cockroach-temp575432717/auxiliary : OPEN,ISDIR 83 ./cockroach-2/cockroach-temp575432717/auxiliary/ : ACCESS,ISDIR 41 ./cockroach-2/cockroach-temp575432717/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/cockroach-temp575432717/auxiliary/ : OPEN,ISDIR 82 ./cockroach-2/logs : ACCESS,ISDIR 41 ./cockroach-2/logs : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/logs : OPEN,ISDIR 82 ./cockroach-2/logs/ : ACCESS,ISDIR 41 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/logs/ : OPEN,ISDIR 19 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY 82 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR 41 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/logs/goroutine_dump : OPEN,ISDIR 82 ./cockroach-2/logs/goroutine_dump/ : ACCESS,ISDIR 41 ./cockroach-2/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/logs/goroutine_dump/ : OPEN,ISDIR 82 ./cockroach-2/logs/heap_profiler : ACCESS,ISDIR 41 ./cockroach-2/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/logs/heap_profiler : OPEN,ISDIR 82 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR 41 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR 41 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR
replica (cockroach-3) で確認
# time inotifywait -mr --format '%w%f : %e' ./cockroach-3/ > file_access_cockroach-3 Setting up watches. Beware: since -r was given, this may take a while! Watches established. ^C real 3m17.032s user 0m0.052s sys 0m0.116s
cockroach-3 がアクセスしているファイル
# sort ./file_access_cockroach-3 | uniq -c 61 ./cockroach-3/ : ACCESS,ISDIR 43 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/ : OPEN,ISDIR 1712 ./cockroach-3/000379.log : MODIFY 86 ./cockroach-3/auxiliary : ACCESS,ISDIR 43 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary : OPEN,ISDIR 86 ./cockroach-3/auxiliary/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/1 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/1 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/1/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/10 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/10 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/10/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/11 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/11 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/11/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/12 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/12 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/12/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/13 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/13 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/13/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/14 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/14 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/14/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/15 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/15 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/15/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/16 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/16 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/16/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/17 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/17 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/17/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/18 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/18 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/18/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/19 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/19 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/19/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/2 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/2 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/2/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/20 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/20 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/20/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/21 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/21 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/21/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/22 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/22 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/22/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/23 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/23 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/23/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/24 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/24 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/24/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/25 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/25 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/25/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/26 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/26 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/26/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/27 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/27 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/27/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/28 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/28 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/28/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/29 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/29 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/29/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/3 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/3 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/3/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/30 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/30 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/30/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/31 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/31 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/31/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/32 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/32 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/32/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/33 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/33 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/33/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/34 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/34 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/34/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/35 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/35 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/35/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/36 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/36 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/36/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/4 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/4 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/4/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/5 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/5 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/5/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/6 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/6 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/6/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/7 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/7 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/7/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/8 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/8 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/8/ : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/9 : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/9 : OPEN,ISDIR 86 ./cockroach-3/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/auxiliary/sstsnapshot/9/ : OPEN,ISDIR 86 ./cockroach-3/cockroach-temp395666710 : ACCESS,ISDIR 43 ./cockroach-3/cockroach-temp395666710 : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/cockroach-temp395666710 : OPEN,ISDIR 86 ./cockroach-3/cockroach-temp395666710/ : ACCESS,ISDIR 43 ./cockroach-3/cockroach-temp395666710/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/cockroach-temp395666710/ : OPEN,ISDIR 86 ./cockroach-3/cockroach-temp395666710/auxiliary : ACCESS,ISDIR 43 ./cockroach-3/cockroach-temp395666710/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/cockroach-temp395666710/auxiliary : OPEN,ISDIR 86 ./cockroach-3/cockroach-temp395666710/auxiliary/ : ACCESS,ISDIR 43 ./cockroach-3/cockroach-temp395666710/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/cockroach-temp395666710/auxiliary/ : OPEN,ISDIR 86 ./cockroach-3/logs : ACCESS,ISDIR 43 ./cockroach-3/logs : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/logs : OPEN,ISDIR 86 ./cockroach-3/logs/ : ACCESS,ISDIR 43 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR 43 ./cockroach-3/logs/ : OPEN,ISDIR 20 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY 84 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR 42 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR 42 ./cockroach-3/logs/goroutine_dump : OPEN,ISDIR 84 ./cockroach-3/logs/goroutine_dump/ : ACCESS,ISDIR 42 ./cockroach-3/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR 42 ./cockroach-3/logs/goroutine_dump/ : OPEN,ISDIR 88 ./cockroach-3/logs/heap_profiler : ACCESS,ISDIR 44 ./cockroach-3/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR 44 ./cockroach-3/logs/heap_profiler : OPEN,ISDIR 88 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR 44 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR 44 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR 1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_20_32.541.47427880.pprof : DELETE 1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CREATE 309 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : MODIFY 1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : OPEN
cockroach-1 (Leaseholder) と比べて、cockroach-2/cockroach-3 (Replica) の方がアクセスされているファイルが多いように見えます。この差分も気になるところですが、今回の本題からはそれるので一旦気にしないでおきます。
本命 (INSERT 時にアクセスしているファイル)
それでは、本命について調べてみます。先程と同じように、ホスト側で inotfywait を実行した上で、INSERT を実行します。
INSERT 文
root@cockroach-1:26257/defaultdb> BEGIN; BEGIN Time: 0ms total (execution 1ms / network 0ms) root@cockroach-1:26257/defaultdb OPEN> root@cockroach-1:26257/defaultdb OPEN> INSERT INTO t1 VALUES (111, 'aaa'); INSERT 1 Time: 2ms total (execution 2ms / network 0ms) root@cockroach-1:26257/defaultdb OPEN> root@cockroach-1:26257/defaultdb OPEN> COMMIT; COMMIT Time: 14ms total (execution 14ms / network 0ms) root@cockroach-1:26257/defaultdb>
Leaseholder (cockroach-1)
# time inotifywait -mr --format '%w%f : %e' ./cockroach-1/ > INSERT_file_access_cockroach-1 Setting up watches. Beware: since -r was given, this may take a while! Watches established. ^C real 3m59.656s user 0m0.040s sys 0m0.105s
INSERT 時に cockroach-1 がアクセスしているファイル
# sort ./INSERT_file_access_cockroach-1 | uniq -c 67 ./cockroach-1/ : ACCESS,ISDIR 52 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/ : OPEN,ISDIR 1 ./cockroach-1/000002.log : MOVED_FROM 1 ./cockroach-1/000011.log : CLOSE_WRITE,CLOSE 163 ./cockroach-1/000011.log : MODIFY 84 ./cockroach-1/000013.sst : ACCESS 3 ./cockroach-1/000013.sst : CLOSE_NOWRITE,CLOSE 1 ./cockroach-1/000013.sst : DELETE 2 ./cockroach-1/000013.sst : OPEN 1966 ./cockroach-1/000014.log : MODIFY 1 ./cockroach-1/000014.log : MOVED_TO 1 ./cockroach-1/000014.log : OPEN 77 ./cockroach-1/000015.sst : ACCESS 2 ./cockroach-1/000015.sst : CLOSE_NOWRITE,CLOSE 1 ./cockroach-1/000015.sst : CLOSE_WRITE,CLOSE 1 ./cockroach-1/000015.sst : CREATE 1 ./cockroach-1/000015.sst : DELETE 65 ./cockroach-1/000015.sst : MODIFY 3 ./cockroach-1/000015.sst : OPEN 20 ./cockroach-1/000016.sst : ACCESS 1 ./cockroach-1/000016.sst : CLOSE_WRITE,CLOSE 1 ./cockroach-1/000016.sst : CREATE 134 ./cockroach-1/000016.sst : MODIFY 2 ./cockroach-1/000016.sst : OPEN 2 ./cockroach-1/MANIFEST-000001 : MODIFY 104 ./cockroach-1/auxiliary : ACCESS,ISDIR 52 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/auxiliary : OPEN,ISDIR 104 ./cockroach-1/auxiliary/ : ACCESS,ISDIR 52 ./cockroach-1/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/auxiliary/ : OPEN,ISDIR 105 ./cockroach-1/cockroach-temp755268128 : ACCESS,ISDIR 52 ./cockroach-1/cockroach-temp755268128 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/cockroach-temp755268128 : OPEN,ISDIR 105 ./cockroach-1/cockroach-temp755268128/ : ACCESS,ISDIR 52 ./cockroach-1/cockroach-temp755268128/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/cockroach-temp755268128/ : OPEN,ISDIR 104 ./cockroach-1/cockroach-temp755268128/auxiliary : ACCESS,ISDIR 52 ./cockroach-1/cockroach-temp755268128/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/cockroach-temp755268128/auxiliary : OPEN,ISDIR 104 ./cockroach-1/cockroach-temp755268128/auxiliary/ : ACCESS,ISDIR 52 ./cockroach-1/cockroach-temp755268128/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/cockroach-temp755268128/auxiliary/ : OPEN,ISDIR 104 ./cockroach-1/logs : ACCESS,ISDIR 52 ./cockroach-1/logs : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/logs : OPEN,ISDIR 104 ./cockroach-1/logs/ : ACCESS,ISDIR 52 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/logs/ : OPEN,ISDIR 1 ./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY 24 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY 104 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR 52 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/logs/goroutine_dump : OPEN,ISDIR 104 ./cockroach-1/logs/goroutine_dump/ : ACCESS,ISDIR 52 ./cockroach-1/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-1/logs/goroutine_dump/ : OPEN,ISDIR 114 ./cockroach-1/logs/heap_profiler : ACCESS,ISDIR 57 ./cockroach-1/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR 57 ./cockroach-1/logs/heap_profiler : OPEN,ISDIR 114 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR 57 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR 57 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_15.201.253542400.txt : DELETE 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_25.201.254353408.txt : DELETE 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CREATE 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : MODIFY 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : OPEN 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CREATE 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : MODIFY 1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : OPEN
cockroach-1 での INSERT 時と平常時の差分
# diff -u <(sort ./file_access_cockroach-1 | uniq) <(sort ./INSERT_file_access_cockroach-1 | uniq) --- /dev/fd/63 2021-08-28 15:46:27.767770309 +0900 +++ /dev/fd/62 2021-08-28 15:46:27.771772598 +0900 @@ -1,7 +1,29 @@ ./cockroach-1/ : ACCESS,ISDIR ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-1/ : OPEN,ISDIR +./cockroach-1/000002.log : MOVED_FROM +./cockroach-1/000011.log : CLOSE_WRITE,CLOSE ./cockroach-1/000011.log : MODIFY +./cockroach-1/000013.sst : ACCESS +./cockroach-1/000013.sst : CLOSE_NOWRITE,CLOSE +./cockroach-1/000013.sst : DELETE +./cockroach-1/000013.sst : OPEN +./cockroach-1/000014.log : MODIFY +./cockroach-1/000014.log : MOVED_TO +./cockroach-1/000014.log : OPEN +./cockroach-1/000015.sst : ACCESS +./cockroach-1/000015.sst : CLOSE_NOWRITE,CLOSE +./cockroach-1/000015.sst : CLOSE_WRITE,CLOSE +./cockroach-1/000015.sst : CREATE +./cockroach-1/000015.sst : DELETE +./cockroach-1/000015.sst : MODIFY +./cockroach-1/000015.sst : OPEN +./cockroach-1/000016.sst : ACCESS +./cockroach-1/000016.sst : CLOSE_WRITE,CLOSE +./cockroach-1/000016.sst : CREATE +./cockroach-1/000016.sst : MODIFY +./cockroach-1/000016.sst : OPEN +./cockroach-1/MANIFEST-000001 : MODIFY ./cockroach-1/auxiliary : ACCESS,ISDIR ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-1/auxiliary : OPEN,ISDIR @@ -26,6 +48,7 @@ ./cockroach-1/logs/ : ACCESS,ISDIR ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-1/logs/ : OPEN,ISDIR +./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR @@ -39,3 +62,13 @@ ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_15.201.253542400.txt : DELETE +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_25.201.254353408.txt : DELETE +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CLOSE_WRITE,CLOSE +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CREATE +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : MODIFY +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : OPEN +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CLOSE_WRITE,CLOSE +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CREATE +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : MODIFY +./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : OPEN
replica (cockroach-2)
# time inotifywait -mr --format '%w%f : %e' ./cockroach-2/ > INSERT_file_access_cockroach-2 Setting up watches. Beware: since -r was given, this may take a while! Watches established. ^C real 3m58.508s user 0m0.092s sys 0m0.123s
INSERT 時に cockroach-2 がアクセスしているファイル
# sort ./INSERT_file_access_cockroach-2 | uniq -c 74 ./cockroach-2/ : ACCESS,ISDIR 52 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/ : OPEN,ISDIR 1 ./cockroach-2/000367.log : MOVED_FROM 1 ./cockroach-2/000378.log : CLOSE_WRITE,CLOSE 591 ./cockroach-2/000378.log : MODIFY 88 ./cockroach-2/000380.sst : ACCESS 3 ./cockroach-2/000380.sst : CLOSE_NOWRITE,CLOSE 1 ./cockroach-2/000380.sst : DELETE 2 ./cockroach-2/000380.sst : OPEN 1504 ./cockroach-2/000381.log : MODIFY 1 ./cockroach-2/000381.log : MOVED_TO 1 ./cockroach-2/000381.log : OPEN 78 ./cockroach-2/000382.sst : ACCESS 2 ./cockroach-2/000382.sst : CLOSE_NOWRITE,CLOSE 1 ./cockroach-2/000382.sst : CLOSE_WRITE,CLOSE 1 ./cockroach-2/000382.sst : CREATE 1 ./cockroach-2/000382.sst : DELETE 68 ./cockroach-2/000382.sst : MODIFY 3 ./cockroach-2/000382.sst : OPEN 13 ./cockroach-2/000383.sst : ACCESS 1 ./cockroach-2/000383.sst : CLOSE_WRITE,CLOSE 1 ./cockroach-2/000383.sst : CREATE 130 ./cockroach-2/000383.sst : MODIFY 2 ./cockroach-2/000383.sst : OPEN 2 ./cockroach-2/MANIFEST-000001 : MODIFY 104 ./cockroach-2/auxiliary : ACCESS,ISDIR 52 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary : OPEN,ISDIR 104 ./cockroach-2/auxiliary/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/1 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/1 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/1/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/10 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/10 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/10/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/11 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/11 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/11/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/12 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/12 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/12/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/13 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/13 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/13/ : OPEN,ISDIR 103 ./cockroach-2/auxiliary/sstsnapshot/14 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/14 : OPEN,ISDIR 103 ./cockroach-2/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/14/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/15 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/15 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/15/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/16 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/16 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/16/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/17 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/17 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/17/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/18 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/18 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/18/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/19 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/19 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/19/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/2 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/2 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/2/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/20 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/20 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/20/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/21 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/21 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/21/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/22 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/22 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/22/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/23 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/23 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/23/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/24 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/24 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/24/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/25 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/25 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/25/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/26 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/26 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/26/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/27 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/27 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/27/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/28 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/28 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/28/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/29 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/29 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/29/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/3 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/3 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/3/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/30 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/30 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/30/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/31 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/31 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/31/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/32 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/32 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/32/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/33 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/33 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/33/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/34 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/34 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/34/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/35 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/35 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/35/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/36 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/36 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/36/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/4 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/4 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/4/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/5 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/5 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/5/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/6 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/6 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/6/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/7 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/7 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/7/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/8 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/8 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/8/ : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/9 : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/9 : OPEN,ISDIR 104 ./cockroach-2/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/auxiliary/sstsnapshot/9/ : OPEN,ISDIR 104 ./cockroach-2/cockroach-temp575432717 : ACCESS,ISDIR 52 ./cockroach-2/cockroach-temp575432717 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/cockroach-temp575432717 : OPEN,ISDIR 104 ./cockroach-2/cockroach-temp575432717/ : ACCESS,ISDIR 52 ./cockroach-2/cockroach-temp575432717/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/cockroach-temp575432717/ : OPEN,ISDIR 104 ./cockroach-2/cockroach-temp575432717/auxiliary : ACCESS,ISDIR 52 ./cockroach-2/cockroach-temp575432717/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/cockroach-temp575432717/auxiliary : OPEN,ISDIR 104 ./cockroach-2/cockroach-temp575432717/auxiliary/ : ACCESS,ISDIR 52 ./cockroach-2/cockroach-temp575432717/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/cockroach-temp575432717/auxiliary/ : OPEN,ISDIR 104 ./cockroach-2/logs : ACCESS,ISDIR 52 ./cockroach-2/logs : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/logs : OPEN,ISDIR 104 ./cockroach-2/logs/ : ACCESS,ISDIR 52 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/logs/ : OPEN,ISDIR 1 ./cockroach-2/logs/cockroach-pebble.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY 24 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY 104 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR 52 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/logs/goroutine_dump : OPEN,ISDIR 104 ./cockroach-2/logs/goroutine_dump/ : ACCESS,ISDIR 52 ./cockroach-2/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-2/logs/goroutine_dump/ : OPEN,ISDIR 120 ./cockroach-2/logs/heap_profiler : ACCESS,ISDIR 60 ./cockroach-2/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR 60 ./cockroach-2/logs/heap_profiler : OPEN,ISDIR 120 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR 60 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR 60 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_08.976.244809728.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_18.976.246157312.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_38.983.246288384.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_48.984.247365632.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_58.984.248446976.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : OPEN 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : DELETE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : OPEN 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : OPEN 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : OPEN 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : OPEN 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : OPEN 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CREATE 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : MODIFY 1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : OPEN
cockroach-2 での INSERT 時と平常時の差分
# diff -u <(sort ./file_access_cockroach-2 | uniq) <(sort ./INSERT_file_access_cockroach-2 | uniq) --- /dev/fd/63 2021-08-28 15:49:21.260992890 +0900 +++ /dev/fd/62 2021-08-28 15:49:21.264996153 +0900 @@ -1,7 +1,29 @@ ./cockroach-2/ : ACCESS,ISDIR ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-2/ : OPEN,ISDIR +./cockroach-2/000367.log : MOVED_FROM +./cockroach-2/000378.log : CLOSE_WRITE,CLOSE ./cockroach-2/000378.log : MODIFY +./cockroach-2/000380.sst : ACCESS +./cockroach-2/000380.sst : CLOSE_NOWRITE,CLOSE +./cockroach-2/000380.sst : DELETE +./cockroach-2/000380.sst : OPEN +./cockroach-2/000381.log : MODIFY +./cockroach-2/000381.log : MOVED_TO +./cockroach-2/000381.log : OPEN +./cockroach-2/000382.sst : ACCESS +./cockroach-2/000382.sst : CLOSE_NOWRITE,CLOSE +./cockroach-2/000382.sst : CLOSE_WRITE,CLOSE +./cockroach-2/000382.sst : CREATE +./cockroach-2/000382.sst : DELETE +./cockroach-2/000382.sst : MODIFY +./cockroach-2/000382.sst : OPEN +./cockroach-2/000383.sst : ACCESS +./cockroach-2/000383.sst : CLOSE_WRITE,CLOSE +./cockroach-2/000383.sst : CREATE +./cockroach-2/000383.sst : MODIFY +./cockroach-2/000383.sst : OPEN +./cockroach-2/MANIFEST-000001 : MODIFY ./cockroach-2/auxiliary : ACCESS,ISDIR ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-2/auxiliary : OPEN,ISDIR @@ -248,6 +270,7 @@ ./cockroach-2/logs/ : ACCESS,ISDIR ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-2/logs/ : OPEN,ISDIR +./cockroach-2/logs/cockroach-pebble.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR @@ -261,3 +284,38 @@ ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_08.976.244809728.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_18.976.246157312.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_38.983.246288384.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_48.984.247365632.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_58.984.248446976.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : OPEN +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : DELETE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : OPEN +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : OPEN +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : OPEN +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : OPEN +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : OPEN +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CLOSE_WRITE,CLOSE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CREATE +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : MODIFY +./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : OPEN
replica (cockroach-3)
# time inotifywait -mr --format '%w%f : %e' ./cockroach-3/ > INSERT_file_access_cockroach-3 Setting up watches. Beware: since -r was given, this may take a while! Watches established. ^C real 3m58.410s user 0m0.068s sys 0m0.148s
INSERT 時に cockroach-3 がアクセスしているファイル
# sort ./INSERT_file_access_cockroach-3 | uniq -c 68 ./cockroach-3/ : ACCESS,ISDIR 52 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/ : OPEN,ISDIR 1 ./cockroach-3/000368.log : MOVED_FROM 1 ./cockroach-3/000379.log : CLOSE_WRITE,CLOSE 567 ./cockroach-3/000379.log : MODIFY 116 ./cockroach-3/000381.sst : ACCESS 3 ./cockroach-3/000381.sst : CLOSE_NOWRITE,CLOSE 1 ./cockroach-3/000381.sst : DELETE 2 ./cockroach-3/000381.sst : OPEN 1506 ./cockroach-3/000382.log : MODIFY 1 ./cockroach-3/000382.log : MOVED_TO 1 ./cockroach-3/000382.log : OPEN 80 ./cockroach-3/000383.sst : ACCESS 2 ./cockroach-3/000383.sst : CLOSE_NOWRITE,CLOSE 1 ./cockroach-3/000383.sst : CLOSE_WRITE,CLOSE 1 ./cockroach-3/000383.sst : CREATE 1 ./cockroach-3/000383.sst : DELETE 66 ./cockroach-3/000383.sst : MODIFY 3 ./cockroach-3/000383.sst : OPEN 15 ./cockroach-3/000384.sst : ACCESS 1 ./cockroach-3/000384.sst : CLOSE_WRITE,CLOSE 1 ./cockroach-3/000384.sst : CREATE 126 ./cockroach-3/000384.sst : MODIFY 2 ./cockroach-3/000384.sst : OPEN 2 ./cockroach-3/MANIFEST-000001 : MODIFY 104 ./cockroach-3/auxiliary : ACCESS,ISDIR 52 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary : OPEN,ISDIR 104 ./cockroach-3/auxiliary/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/1 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/1 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/1/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/10 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/10 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/10/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/11 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/11 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/11/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/12 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/12 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/12/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/13 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/13 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/13/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/14 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/14 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/14/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/15 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/15 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/15/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/16 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/16 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/16/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/17 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/17 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/17/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/18 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/18 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/18/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/19 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/19 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/19/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/2 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/2 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/2/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/20 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/20 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/20/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/21 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/21 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/21/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/22 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/22 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/22/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/23 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/23 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/23/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/24 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/24 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/24/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/25 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/25 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/25/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/26 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/26 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/26/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/27 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/27 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/27/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/28 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/28 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/28/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/29 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/29 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/29/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/3 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/3 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/3/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/30 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/30 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/30/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/31 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/31 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/31/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/32 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/32 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/32/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/33 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/33 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/33/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/34 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/34 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/34/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/35 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/35 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/35/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/36 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/36 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/36/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/4 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/4 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/4/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/5 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/5 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/5/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/6 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/6 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/6/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/7 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/7 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/7/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/8 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/8 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/8/ : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/9 : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/9 : OPEN,ISDIR 104 ./cockroach-3/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/auxiliary/sstsnapshot/9/ : OPEN,ISDIR 104 ./cockroach-3/cockroach-temp395666710 : ACCESS,ISDIR 52 ./cockroach-3/cockroach-temp395666710 : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/cockroach-temp395666710 : OPEN,ISDIR 104 ./cockroach-3/cockroach-temp395666710/ : ACCESS,ISDIR 52 ./cockroach-3/cockroach-temp395666710/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/cockroach-temp395666710/ : OPEN,ISDIR 104 ./cockroach-3/cockroach-temp395666710/auxiliary : ACCESS,ISDIR 52 ./cockroach-3/cockroach-temp395666710/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/cockroach-temp395666710/auxiliary : OPEN,ISDIR 104 ./cockroach-3/cockroach-temp395666710/auxiliary/ : ACCESS,ISDIR 52 ./cockroach-3/cockroach-temp395666710/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/cockroach-temp395666710/auxiliary/ : OPEN,ISDIR 104 ./cockroach-3/logs : ACCESS,ISDIR 52 ./cockroach-3/logs : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/logs : OPEN,ISDIR 104 ./cockroach-3/logs/ : ACCESS,ISDIR 52 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/logs/ : OPEN,ISDIR 2 ./cockroach-3/logs/cockroach-pebble.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY 24 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY 104 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR 52 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/logs/goroutine_dump : OPEN,ISDIR 104 ./cockroach-3/logs/goroutine_dump/ : ACCESS,ISDIR 52 ./cockroach-3/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR 52 ./cockroach-3/logs/goroutine_dump/ : OPEN,ISDIR 118 ./cockroach-3/logs/heap_profiler : ACCESS,ISDIR 59 ./cockroach-3/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR 59 ./cockroach-3/logs/heap_profiler : OPEN,ISDIR 118 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR 59 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR 59 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_30_12.564.245551104.txt : DELETE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_32.557.246333440.txt : DELETE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_42.557.247955456.txt : DELETE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_52.557.248496128.txt : DELETE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_02.558.249307136.txt : DELETE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CREATE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : DELETE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : MODIFY 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : OPEN 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CREATE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : MODIFY 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : OPEN 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CREATE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : MODIFY 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : OPEN 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CREATE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : MODIFY 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : OPEN 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CREATE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : MODIFY 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : OPEN 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CLOSE_WRITE,CLOSE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CREATE 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : MODIFY 1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : OPEN
cockroach-3 での INSERT 時と平常時の差分
# diff -u <(sort ./file_access_cockroach-3 | uniq) <(sort ./INSERT_file_access_cockroach-3 | uniq) --- /dev/fd/63 2021-08-28 15:49:43.289889149 +0900 +++ /dev/fd/62 2021-08-28 15:49:43.289889149 +0900 @@ -1,7 +1,29 @@ ./cockroach-3/ : ACCESS,ISDIR ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-3/ : OPEN,ISDIR +./cockroach-3/000368.log : MOVED_FROM +./cockroach-3/000379.log : CLOSE_WRITE,CLOSE ./cockroach-3/000379.log : MODIFY +./cockroach-3/000381.sst : ACCESS +./cockroach-3/000381.sst : CLOSE_NOWRITE,CLOSE +./cockroach-3/000381.sst : DELETE +./cockroach-3/000381.sst : OPEN +./cockroach-3/000382.log : MODIFY +./cockroach-3/000382.log : MOVED_TO +./cockroach-3/000382.log : OPEN +./cockroach-3/000383.sst : ACCESS +./cockroach-3/000383.sst : CLOSE_NOWRITE,CLOSE +./cockroach-3/000383.sst : CLOSE_WRITE,CLOSE +./cockroach-3/000383.sst : CREATE +./cockroach-3/000383.sst : DELETE +./cockroach-3/000383.sst : MODIFY +./cockroach-3/000383.sst : OPEN +./cockroach-3/000384.sst : ACCESS +./cockroach-3/000384.sst : CLOSE_WRITE,CLOSE +./cockroach-3/000384.sst : CREATE +./cockroach-3/000384.sst : MODIFY +./cockroach-3/000384.sst : OPEN +./cockroach-3/MANIFEST-000001 : MODIFY ./cockroach-3/auxiliary : ACCESS,ISDIR ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-3/auxiliary : OPEN,ISDIR @@ -248,6 +270,7 @@ ./cockroach-3/logs/ : ACCESS,ISDIR ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-3/logs/ : OPEN,ISDIR +./cockroach-3/logs/cockroach-pebble.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR @@ -261,8 +284,33 @@ ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR -./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_20_32.541.47427880.pprof : DELETE -./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CLOSE_WRITE,CLOSE -./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CREATE -./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : MODIFY -./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : OPEN +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_30_12.564.245551104.txt : DELETE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_32.557.246333440.txt : DELETE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_42.557.247955456.txt : DELETE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_52.557.248496128.txt : DELETE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_02.558.249307136.txt : DELETE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CLOSE_WRITE,CLOSE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CREATE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : DELETE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : MODIFY +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : OPEN +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CLOSE_WRITE,CLOSE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CREATE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : MODIFY +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : OPEN +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CLOSE_WRITE,CLOSE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CREATE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : MODIFY +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : OPEN +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CLOSE_WRITE,CLOSE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CREATE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : MODIFY +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : OPEN +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CLOSE_WRITE,CLOSE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CREATE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : MODIFY +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : OPEN +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CLOSE_WRITE,CLOSE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CREATE +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : MODIFY +./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : OPEN
差分確認
定期的にアクセスされていたファイルと INSERT 時にアクセスされていたファイルを比較し、INSERT 時にのみアクセスされていたファイルを確認してみようと思います。
XXXXXX.log ファイル
拡張子が ".log" になっているファイルは、エラーメッセージ等を保存する「ログファイル」ではなく、 WAL (Write Ahead Log) です。この WAL は、CockroachDB の Storage Engine として利用されている Pebble が出力しているファイルです。
こちらについては起動直後 (INSERT していないタイミング) でも定期的にアクセスが発生していることが確認できていますが、CockroachDB では Raft 関連のデータ (Raft Log) や Web UI (DB Console) で参照できるクラスタのメトリクスの情報も他の TABLE と同じように KV 形式のデータとして Pebble に保存されます。
そのため、ユーザが INSERT/UPDATE/DELETE 等を実行していなくても定期的に WAL への書き込みが発生している状況であり、INSERT の瞬間にアクセスされたことを明確に観測できている訳では無いのですが、CockroachDB は ACID (今回の場合は特に Durability の部分) 準拠の DB であるため、仕組み上 INSERT 時に WAL (XXXXXX.log) ファイルへのアクセス (Write) が発生することは間違いないと思われます。
※strace でも確認してみましたが、どこかのタイミング (他のレコードを INSERT したタイミング?) で openat(2) して掴みっぱなしにしているのか、INSERT 時に WAL を openat(2) している形跡が確認できませんでした...
XXXXXX.sst ファイル
拡張子が ".sst" になっているファイルは、SSTable (Sorted String Table) と呼ばれるファイルです。こちらも、CockroachDB の Storage Engine である Pebble が出力しているものであり、TABLE の実データが含まれている LSM Tree 実装のファイルです。
しかし、何度か検証してみたところ「INSERT の瞬間に SSTable (XXXXXX.sst) にアクセスしている訳ではない」という感じのようです。
Pebble は LSM Tree 実装の KVS であるため、INSERT されたデータは前述した WAL (XXXXXX.log) に書き込まれた上で、メモリ上の memtable に格納されます。そして、memtable が一定のサイズ以上になった場合や、定期的に実行される memtable のフラッシュ処理時に、memtable の内容が SSTable (XXXXXX.sst) にフラッシュされます。
そのため、厳密に言うと SSTable (XXXXXX.sst) は INSERT 時にアクセスされるファイルではありませんが、INSERT した際に memtable のサイズが上限値に達した場合は、SSTable (XXXXXX.sst) へのアクセス (Write) が発生する動作になると思われます。
MANIFEST-000001 ファイル
こいつについては正体がわかりませんでした...
Pebble のログに以下のような出力が有るので、こいつも Pebble 関連のファイルだと思うのですが、INSERT の処理に関連しているのか否かは分かりませんでした...
# grep MANIFEST cockroach-pebble.log I210828 06:19:03.852876 82 3@vendor/github.com/cockroachdb/pebble/version_set.go:156 ⋮ [n?,pebble,s?] 1 [JOB 1] MANIFEST created 000001 I210828 06:19:03.884580 82 3@vendor/github.com/cockroachdb/pebble/version_set.go:156 ⋮ [n?,pebble,s?] 4 [JOB 1] MANIFEST created 000001
また、このファイルはバイナリデータなのですが、strings や hexdump で中身を覗いてみたところ cockroach_comparator という単語が見えたので、そのあたりをヒントにして別の機会に調べてみようと思います。
# file cockroach-1/MANIFEST-000001 cockroach-1/MANIFEST-000001: data # strings MANIFEST-000001 | head -n 1 cockroach_comparator # hexdump -C MANIFEST-000001 | head -n 2 00000000 bf 13 d7 16 1a 00 01 01 14 63 6f 63 6b 72 6f 61 |.........cockroa| 00000010 63 68 5f 63 6f 6d 70 61 72 61 74 6f 72 03 02 04 |ch_comparator...|
logs/ ディレクトリ配下のファイル
以下の形式で出力されているファイルは TEXT 形式のファイルであり、いわゆる「ログファイル」です。そのため、これらは定常的にアクセスされており、INSERT に直接関連したアクセスではないと思われます。
./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log
./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log
ただし、INSERT に伴い memtable のフラッシュや WAL の recycle が発生すると、それらの処理を実行した旨のメッセージがログファイルに出力されるため、INSERT 時にファイルアクセスが発生する可能性もあります。
- memtable のフラッシュ (SSTable 作成)
I210828 07:56:15.365857 381443 3@vendor/github.com/cockroachdb/pebble/compaction.go:1985 ⋮ [n1,pebble,s1] 92 [JOB 44] flushing: sstable created 000036 I210828 07:56:15.670978 381475 3@vendor/github.com/cockroachdb/pebble/compaction.go:1985 ⋮ [n1,pebble,s1] 95 [JOB 46] compacting: sstable created 000037
- WAL の作成 (recycled)
I210828 07:56:15.365219 253 3@vendor/github.com/cockroachdb/pebble/db.go:1449 ⋮ [n1,pebble,s1] 90 [JOB 43] WAL created 000035 (recycled 000017)
また、logs/heap_profiler/ 配下のファイルについて詳細は調べられていないのですが、ファイル名にタイムスタンプの情報を含んでいることから、定期的にアクセス (更新) されているファイルのようであり、INSERT の処理には直接関連していなさそうです。
ちなみに、.txt になっているファイルの中身を見ると以下のようになっており、メモリ関連の統計情報を扱っているファイルであるようです。
# head -n 30 memstats.2021-08-28T07_34_25.259.282726400.txt Go memory stats: { "Alloc": 58207552, "TotalAlloc": 8454525400, "Sys": 147476488, "Lookups": 0, "Mallocs": 42250539, "Frees": 42004715, "HeapAlloc": 58207552, "HeapSys": 128581632, "HeapIdle": 65052672, "HeapInuse": 63528960, "HeapReleased": 58875904, "HeapObjects": 245824, "StackInuse": 5636096, "StackSys": 5636096, "MSpanInuse": 653616, "MSpanSys": 1015808, "MCacheInuse": 13888, "MCacheSys": 16384, "BuckHashSys": 2235814, "GCSys": 8726760, "OtherSys": 1263994, "NextGC": 65079600, "LastGC": 1630136045376634882, "PauseTotalNs": 39247543, "PauseNs": [ 59176, 88149, 182033,
おまけ
CockroachDB 起動 (DB 初期化) 直後に作成されているファイルは以下のようになっていました。SSTable (XXXXXX.sst ファイル) は初期状態では存在していないようです。
CockroachDB 起動 (DB 初期化) 直後に作成されているファイル
$ sudo ls -laFR cockroach-1 cockroach-1: total 360516 drwxr-xr-x 5 root root 4096 Aug 29 10:51 ./ drwxr-xr-x 5 root root 4096 Aug 29 10:50 ../ -rw-r----- 1 root root 147639 Aug 29 10:50 000002.log -rw-r----- 1 root root 456550 Aug 29 10:50 000004.log -rw-r----- 1 root root 800183 Aug 29 10:50 000005.log -rw-r----- 1 root root 1761113 Aug 29 10:51 000006.log -rw-r----- 1 root root 286878 Aug 29 10:51 000007.log -rw-r----- 1 root root 16 Aug 29 10:50 CURRENT -rw-r----- 1 root root 0 Aug 29 10:50 LOCK -rw-r----- 1 root root 44 Aug 29 10:50 MANIFEST-000001 -rw-r----- 1 root root 2224 Aug 29 10:50 OPTIONS-000003 drwxr-x--- 2 root root 4096 Aug 29 10:50 auxiliary/ drwxr-xr-x 3 root root 4096 Aug 29 10:50 cockroach-temp096599273/ -rw-r----- 1 root root 17 Aug 29 10:50 cockroach.advertise-addr -rw-r----- 1 root root 17 Aug 29 10:50 cockroach.advertise-sql-addr -rw-r----- 1 root root 16 Aug 29 10:50 cockroach.http-addr -rw-r----- 1 root root 10 Aug 29 10:50 cockroach.listen-addr -rw-r----- 1 root root 10 Aug 29 10:50 cockroach.sql-addr drwxr-x--- 4 root root 4096 Aug 29 10:50 logs/ -rw-r----- 1 root root 50 Aug 29 10:50 temp-dirs-record.txt cockroach-1/auxiliary: total 8 drwxr-x--- 2 root root 4096 Aug 29 10:50 ./ drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../ cockroach-1/cockroach-temp096599273: total 24 drwxr-xr-x 3 root root 4096 Aug 29 10:50 ./ drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../ -rw-r----- 1 root root 0 Aug 29 10:50 000002.log -rw-r----- 1 root root 16 Aug 29 10:50 CURRENT -rw-r----- 1 root root 0 Aug 29 10:50 LOCK -rw-r----- 1 root root 50 Aug 29 10:50 MANIFEST-000001 -rw-r----- 1 root root 2159 Aug 29 10:50 OPTIONS-000003 -rw-r----- 1 root root 0 Aug 29 10:50 TEMP_DIR.LOCK drwxr-x--- 2 root root 4096 Aug 29 10:50 auxiliary/ cockroach-1/cockroach-temp096599273/auxiliary: total 8 drwxr-x--- 2 root root 4096 Aug 29 10:50 ./ drwxr-xr-x 3 root root 4096 Aug 29 10:50 ../ cockroach-1/logs: total 136 drwxr-x--- 4 root root 4096 Aug 29 10:50 ./ drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../ -rw-r----- 1 root root 2242 Aug 29 10:51 cockroach-pebble.cockroach-1.root.2021-08-29T01_50_45Z.000001.log lrwxrwxrwx 1 root root 65 Aug 29 10:50 cockroach-pebble.log -> cockroach-pebble.cockroach-1.root.2021-08-29T01_50_45Z.000001.log -rw-r----- 1 root root 973 Aug 29 10:50 cockroach-stderr.cockroach-1.root.2021-08-29T01_50_45Z.000001.log lrwxrwxrwx 1 root root 65 Aug 29 10:50 cockroach-stderr.log -> cockroach-stderr.cockroach-1.root.2021-08-29T01_50_45Z.000001.log -rw-r----- 1 root root 105762 Aug 29 10:51 cockroach.cockroach-1.root.2021-08-29T01_50_45Z.000001.log lrwxrwxrwx 1 root root 58 Aug 29 10:50 cockroach.log -> cockroach.cockroach-1.root.2021-08-29T01_50_45Z.000001.log drwxr-x--- 2 root root 4096 Aug 29 10:50 goroutine_dump/ drwxr-x--- 2 root root 4096 Aug 29 10:51 heap_profiler/ cockroach-1/logs/goroutine_dump: total 8 drwxr-x--- 2 root root 4096 Aug 29 10:50 ./ drwxr-x--- 4 root root 4096 Aug 29 10:50 ../ cockroach-1/logs/heap_profiler: total 72 drwxr-x--- 2 root root 4096 Aug 29 10:51 ./ drwxr-x--- 4 root root 4096 Aug 29 10:50 ../ -rw-r----- 1 root root 37375 Aug 29 10:50 memprof.2021-08-29T01_50_57.174.37237424.pprof -rw-r----- 1 root root 9186 Aug 29 10:50 memstats.2021-08-29T01_50_57.184.150753280.txt -rw-r----- 1 root root 9312 Aug 29 10:51 memstats.2021-08-29T01_51_07.174.175755264.txt
まとめ
CockroachDB に 1レコード INSERT すると...
- データの永続化のために WAL (XXXXXX.log ファイル) にアクセスする。
- (INSERT で memtable のサイズが上限を超えると) memtable を永続化するために SSTable (XXXXXX.sst ファイル) にアクセスすると思われる。
- (詳細は不明だが) MANIFEST-000001 というファイルにアクセスしてるっぽい...?
という感じになってました。
Pebble なんもわからん (´・ω・`)