diff --git a/build.yaml b/build.yaml
index 7cafb0ac6fe073985003d01717c4e968db88dbe6..e003dd83396d77779215382dac6c717f44e8f378 100644
--- a/build.yaml
+++ b/build.yaml
@@ -1058,6 +1058,7 @@ targets:
   - gpr_test_util
   - gpr
 - name: dns_resolver_connectivity_test
+  cpu_cost: 0.1
   build: test
   language: c
   src:
diff --git a/src/core/client_config/resolvers/dns_resolver.c b/src/core/client_config/resolvers/dns_resolver.c
index 55457647b3c64074dba21f4ce53914b5d597895f..e28e4757a107bfa01a5d53864885f06509d7114f 100644
--- a/src/core/client_config/resolvers/dns_resolver.c
+++ b/src/core/client_config/resolvers/dns_resolver.c
@@ -95,6 +95,9 @@ static const grpc_resolver_vtable dns_resolver_vtable = {
 static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver) {
   dns_resolver *r = (dns_resolver *)resolver;
   gpr_mu_lock(&r->mu);
+  if (r->have_retry_timer) {
+    grpc_timer_cancel(exec_ctx, &r->retry_timer);
+  }
   if (r->next_completion != NULL) {
     *r->target_config = NULL;
     grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, true, NULL);
@@ -133,13 +136,14 @@ static void dns_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg,
                                bool success) {
   dns_resolver *r = arg;
 
+  gpr_mu_lock(&r->mu);
+  r->have_retry_timer = false;
   if (success) {
-    gpr_mu_lock(&r->mu);
     if (!r->resolving) {
       dns_start_resolving_locked(r);
     }
-    gpr_mu_unlock(&r->mu);
   }
+  gpr_mu_unlock(&r->mu);
 
   GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "retry-timer");
 }
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index c2d6cadd5309fc455f801b773693f3f77a5c1355..724cd64d19c73d333280090d424bb784addfa3ac 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -261,7 +261,7 @@
       "posix", 
       "windows"
     ], 
-    "cpu_cost": 1.0, 
+    "cpu_cost": 0.1, 
     "exclude_configs": [], 
     "flaky": false, 
     "gtest": false,